Объединение ячеек в 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 и т. Д. (Без регулярного шаблона).

введите описание изображения здесь

Он объединяет ячейки, как показано в предыдущем снимке, как это видно сразу под ячейкой Note . После слияния этих ячеек по строкам, я пытаюсь объединить их по столбцам следующим образом.

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

но это не сработает. Когда я пытаюсь открыть файл excel, он запрашивает подтверждение (с полем подтверждения)

Excel нашел нечитаемый контент в 'report.xlsx'. Вы хотите восстановить содержание этой книги? Если вы доверяете источнику этой книги, нажмите «Да».

Как объединить ячейки по строкам и столбцам вместе в Excel?

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

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

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

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

РЕДАКТИРОВАТЬ

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

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

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

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

Я делаю простую функцию для вычисления ячеек для слияния по столбцам и строкам.

 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