Мне нужно объединить ячейки в 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