Объединение ячеек в 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),
)
));