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

Он объединяет ячейки, как показано в предыдущем snap shot, Как видно непосредственно под ячейкой Note. После объединения этих ячеек по строкам я пытаюсь объединить их по столбцам, как следует.
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
Но это не работает. Когда я пытаюсь открыть файл excel, он запрашивает подтверждение (с полем подтверждения)
Excel обнаружил в отчете нечитаемое содержимое.файлы XLSX'. Вы хотите
восстановить содержимое этой книги? Если Вы доверяете источнику этого
книга, нажмите кнопку Да.
Как тогда объединить ячейки по строкам и столбцам в Excel?
4 ответов:
Слияние просто требует допустимого диапазона ячеек, таких как A1:B2, поэтому ваш
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));Должно работать без каких-либо проблем.
Не могли бы вы поэкспериментировать с простым тестовым случаем, чтобы доказать, что это вызывает у вас проблему, а не что-то другое в вашем сценарии
EDIT
После перечитывания вашего вопроса: Ваша проблема может заключаться в том, что вы пытаетесь объединить ячейки, которые уже являются частью диапазона слияния, вместо того, чтобы объединять каждую строку, а затем пытаться объединить по столбцу, попробуйте слияние всего диапазона на одном дыхании.
$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))
Я делаю простую функцию для calc-ячеек, чтобы объединить 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 Baker
Comments