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

1104   4  

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

    Ничего не найдено.