Копирование и вставка стилей из одной строки в другую

Я использую PHP Excel для создания Excel с использованием файла Excel Excel. Проблема в том, что у меня есть datagrid, и я создал заголовок и первую строку в шаблоне. Вот как это выглядит:

шаблон

Верхняя левая координата – C49.

Если у меня есть 100 строк, мне нужно скопировать стиль первой строки и вставить его 100 раз. Вот мой код

$cstart = 2; $rstart = 49; $count = 1; $input = $worksheet->getStyle(num2char($cstart) . $rstart); foreach ($b_data['rawData'] as $value) { $worksheet->setCellValueByColumnAndRow($cstart, $rstart, $count++) ->setCellValueByColumnAndRow($cstart + 1, $rstart, $value['key']) ->setCellValueByColumnAndRow($cstart + 5, $rstart, $value['value']); $interval = num2char($cstart) . $rstart . ':' . num2char($cstart+5) . $rstart; $worksheet->duplicateStyle($input, $interval); $rstart++; } function num2char($num) { $numeric = $num % 26; $letter = chr(65 + $numeric); $num2 = intval($num / 26); if ($num2 > 0) { return num2char($num2 - 1) . $letter; } else { return $letter; } } 

Однако у меня было следующее:

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

но я ожидал:

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

Это ошибка или я что-то не так?

Как отметил Марк в комментариях; объединенная ячейка является структурной, а не стильной. Поэтому копирование стиля не будет автоматически копировать объединенные ячейки.

Существует запрос функции, позволяющий дублировать целые строки, включая объединенные ячейки


Один из способов борьбы с этим – проверить, являются ли ячейки частью слияния с помощью функции isInMergeRange() следующим образом:

 $workbook = new PHPExcel; // prepare the workbook $sheet = $workbook->getActiveSheet(); // get the sheet $sheet->mergeCells('A1:E1'); // merge some cells for tesing $cell = $sheet->getCell('A1'); // get a cell to check if it is merged $cell->isInMergeRange() // check if cell is merged 

^ Это возвращает логическое значение, указывающее, является ли оно частью объединенной ячейки.


Другой функцией, которая может вас заинтересовать, является isMergeRangeValueCell() :

 $cell->isMergeRangeValueCell() 

^ Это возвращает логическое значение, указывающее, что оно является частью объединенной ячейки, и ячейка содержит значение для объединенного диапазона; он возвращает false во всех других ситуациях.