使用PHPExcel将行和列中的单元格合并在一起

时间:2012-06-06 07:05:24

标签: php excel-2007 phpexcel

我需要按行合并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等等(没有常规模式)。

enter image description here

它合并了前面snap shot中显示的单元格,可以在注意单元格的正下方看到。在按行合并这些单元格之后,我正在尝试按列合并它们,如下所示。

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

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

  

Excel在'report.xlsx'中找到了不可读的内容。你想要_____吗   恢复本工作簿的内容?如果您相信这个来源   工作簿,单击是。

如何在Excel中按行和列合并单元格呢?

6 个答案:

答案 0 :(得分:22)

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

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

应该没有任何问题。

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

修改

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

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

答案 1 :(得分:8)

还有一种细胞合并方法

    /**
 * 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)

答案 2 :(得分:3)

我创建了一个简单的函数来计算细胞以通过cols和row进行合并。

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));

感谢@Mark Ba​​ker

答案 3 :(得分:3)

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))

答案 4 :(得分:1)

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

但是任何人都可以尝试。.解决方案基于 PHPExcel 确定,它可以在 Maataweb 网站上工作。

Source Link

从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),
)
));

答案 5 :(得分:0)

$sheet -> mergeCellsByColumnAndRow($col1, $row1, col2, row2);

是功能。