Объединение ячеек в Excel по строкам и столбцам вместе с помощью 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 затем?

Ответы

Ответ 1

Слияние просто требует допустимого диапазона ячеек типа A1: B2, поэтому ваш

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

должен работать без проблем.

Можете ли вы поэкспериментировать с простым тестовым примером, чтобы доказать, что это вызывает у вас проблему, а не что-то еще в вашем script

ИЗМЕНИТЬ

Перечитав свой вопрос: Ваша проблема может заключаться в том, что вы пытаетесь объединить ячейки, которые уже являются частью диапазона слияния, вместо того, чтобы сгруппировать каждую строку, а затем попытаться объединиться по столбцу, попробуйте объединить полный диапазон за один раз.

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

Ответ 2

Существует еще один метод слияния ячеек

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

Ответ 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));

Спасибо @Mark Baker

Ответ 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))

Ответ 5

Я также искал решение для этого вопроса. где я хочу объединить ячейку и поместить в нее содержимое (значение). После нескольких поисков я получил какое-то решение по этому вопросу. но не проверил, потому что я использую 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');

Решение 2-е

$sheet->setMergeColumn(array(
'columns' => array('A','B','C','D'),
'rows' => array(
array(2,3),
array(5,11),
)
));