Как в PhpOffice Spreadsheet можно взять таблицу и поместить в PhpWord?

Добрый день! Возникла такая проблема - нужно сгенирировать таблицы в форматах xls, doc, pdf. У всех таблиц будет одинаковая структура. Для XLS и PDF с помощью PhpOffice я уже реализовал по принципу основная логика в XLS, а в PDF просто сохраняется таблица из XLS в HTML и потом загоняется в PDF.
Была идея сделать по тому, же принципу и для DOC, примерно вот так для добавления html в секцию
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $table);

Но этот код не выводит таблицу, он просто выводит значения из ячеек таблицы, хотя по идее должна быть таблица. Я знаю что этот подход с Html::addHtml - он не распознает inline стили, поэтому впринципе он не очень подходит.

Суть вопроса в том, как можно из Spreadsheet перегнать таблицу в PhpWord, чтобы не дублировать одну и ту же логику, а просто держать всю логику печати таблицы только для XLS а в другие форматы конвертировать. Возможно ли это сделать?

Может быть кто-нибудь сталкивался с конвертером для таблиц из Spreadsheet в PhpWord. Думаю его не сложно было бы сделать даже. Но если он уже есть было бы здорово

Спасибо.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 1
kosuha
@kosuha Автор вопроса
js | web
Сделал пока свой метод, который берет Worksheet и переделывает его в Table, с учетом слияния колонок, правда только по ширине, не по высоте

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;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽