Для получения полного доступа
зарегистрируйтесь

PhpOffice переконвертировать таблицу из Spreadsheet в PhpWord Table


Функция, позволяющая перевести PhpOffice Spreadsheet в таблицу PhpWord Table, Чтобы напечатать таблицу в .doc файле. Пришлось сделать эту функцию, потому что перевод XLS->HTML и HTML->DOC работает плохо для таблиц.

Из недочетов метода:

  1. addCell - использует константую ширину ячейки, это можно доработать
  2. Объединение ячеек учитывается только по ширине, не по высоте.

Делал этот метод для того, чтобы основная логика генерации таблиц была в XLS и чтобы генерация DOC использовала эту таблицу уже готовую и вставляла таблицу в заготовленный шаблон DOC.

private function convertXlsToDocTable(Worksheet $sheet, Table $table)
{
    foreach ($sheet->getRowIterator() as $rowIndex => $row) {
        $table->addRow();
        $prevMergeRange = null;
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false);
        foreach ($cellIterator as $cellIndex => $cell) {
            $value = $cell->getValue();
            $mergeRange = $cell->getMergeRange();
            if ($mergeRange && $prevMergeRange == $mergeRange) {
                continue;
            }
            if ($mergeRange) {
                $mergeCount = 0;
                foreach ($row as $mergeCell) {
                    if ($mergeRange == $mergeCell['mergeRange']) {
                        $mergeCount++;
                    }
                }
                $table->addCell(2000, ['gridSpan' => $mergeCount])->addText($value);
                $prevMergeRange = $mergeRange;
            } else {
                $table->addCell(2000, [])->addText($value);
            }
        }
    }

    return $table;
}

Чтобы увидеть комментарии, нужно быть участником сообщества

Регистрация