17

我需要按行合并 Excel (xlsx) 中的单元格,然后使用PHPExcel. 我尝试了以下。

$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));             
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));             
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));     

其中变量$row_count具有一些不可预测的动态值,例如 25、50、75 等(无规则模式)。

在此处输入图像描述

它合并单元格,如前面的快照所示,可以在Note单元格的正下方看到。按行合并这些单元格后,我尝试按列合并它们,如下所示。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));             

但它不起作用。当我尝试打开 excel 文件时,它要求确认(带有确认框)

Excel 在“report.xlsx”中发现了不可读的内容。是否要恢复此工作簿的内容?如果您信任此工作簿的来源,请单击“是”。

那么如何在Excel中按行和列将单元格合并在一起呢?

4

6 回答 6

24

合并只需要一个有效范围的单元格,如 A1:B2,所以你的

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));

应该可以正常工作。

您能否尝试一个简单的测试用例来证明这会导致您出现问题,而不是脚本中的其他问题

编辑

重新阅读您的问题后:您的问题可能是您正在尝试合并已经属于合并范围的单元格,而不是合并每一行,然后尝试按列合并,尝试一次合并整个范围。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));              
于 2012-06-06T07:54:38.947 回答
11

单元格合并还有另一种方法

    /**
 * Set merge on a cell range by using numeric cell coordinates
 *
 * @param   int $pColumn1   Numeric column coordinate of the first cell
 * @param   int $pRow1      Numeric row coordinate of the first cell
 * @param   int $pColumn2   Numeric column coordinate of the last cell
 * @param   int $pRow2      Numeric row coordinate of the last cell
 * @throws  Exception
 * @return PHPExcel_Worksheet
 */
     public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1)
于 2016-02-11T09:38:35.063 回答
4
function cellsToMergeByColsRow($start = -1, $end = -1, $row = -1){
    $merge = 'A1:A1';
    if($start>=0 && $end>=0 && $row>=0){
        $start = PHPExcel_Cell::stringFromColumnIndex($start);
        $end = PHPExcel_Cell::stringFromColumnIndex($end);
        $merge = "$start{$row}:$end{$row}";
    }
    return $merge;
}

案例补充:

$objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3))
于 2013-10-19T15:52:06.840 回答
3

我做了一个简单的函数来计算单元格以按列和行合并。

function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){
    $merge = 'A1:A1';
    if($start && $end && $row){
        $start = PHPExcel_Cell::stringFromColumnIndex($start);
        $end = PHPExcel_Cell::stringFromColumnIndex($end);
        $merge = "$start{$row}:$end{$row}";

    }

    return $merge;
}

并打电话

$sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row));

谢谢@马克贝克

于 2013-06-03T20:55:06.433 回答
1

我也在寻找这个问题的解决方案。我想合并单元格并将内容(值)放在上面。经过几次搜索,我得到了一些解决方案。但没有检查,因为我正在使用Maatawebsite获取Excel文件。

但是任何人都可以尝试。解决方案是基于 PHPExcel的,当然,它可以在Maatawebsite上运行。

来源链接

从A列第1行合并到E列第1行

$objPHPExcel->getActiveSheet()->mergeCells('A1:E1');

// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.'); 

从A列第1行合并到E列第3行

$objPHPExcel->getActiveSheet()->mergeCells('A1:E3');

// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.');

我检查了 maatawebsite 文档,它们具有相同的方法mergeCells。所以我想我会工作。

这个来自 Maatawebste 的解决方案。

$sheet->cells('A1:C1', function($cells) {
    $cells->setBorder('thin', 'thin', 'thin', 'thin');
});
$sheet->mergeCells('A1:C1');

解决方案二

$sheet->setMergeColumn(array(
'columns' => array('A','B','C','D'),
'rows' => array(
array(2,3),
array(5,11),
)
));
于 2019-01-18T16:58:47.180 回答
1
$sheet -> mergeCellsByColumnAndRow($col1, $row1, col2, row2);

是函数。

于 2020-01-27T18:50:41.730 回答