Я использую 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 во всех других ситуациях.