yaleksandr89
@yaleksandr89
PHP developer

Как реализовать создание «сложной» таблицы с помощью PhpSpreadsheet?

Здравствуйте.

Подскажите, как реализовать создание "сложной" таблицы, через библиотеку PhpSpreadsheet. Должна получиться примерно такого вида:
60ed5003e5189188861527.png
То есть колонки: "Поле 2", "Поле 3" могут иметь различное количество ячеек (в зависимости от входящих данных). Сколько не пытался, с мог добиться только такого результата:
60ed50733497b489597582.png
Добился создания различного количества ячеек (в зависимости от входных данных) у столбцов 3 и 4. Проблема в том, что значения в "Поле 4" записываются в следующую ячейку относительна "Поля 3". Никак не могу добиться результат, как на 1 фото.

Сам процесс создания excel файла:
$data = $this->getData();
$spreadsheet = new Spreadsheet();

$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Лист 1');
$columns = range('A', 'D');

$c = 0;
$sheet->setCellValue($columns[$c++] . 1, 'Поле 1');
$sheet->setCellValue($columns[$c++] . 1, 'Поле 2');
$sheet->setCellValue($columns[$c++] . 1, 'Поле 3');
$sheet->setCellValue($columns[$c++] . 1, 'Поле 4');

foreach ($data as $value) {
    $sheet->setCellValue($columns[$c++] . $r, $value->getData1());
    $sheet->setCellValue($columns[$c++] . $r, $value->getData2());

    $c = 2;
    foreach ($value->getData3() as $item3) {
                    $sheet->setCellValue($columns[$c] . $r, $item3);
                    $r++;
    }
    $c = 3;
    foreach ($value->getData4() as $item4) {
                    $sheet->setCellValue($columns[$c] . $r, $item4);
                    $r++;
    }
    
    $r++;
}
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Ведите отдельные счётчики для номера строк для колонок 1-2, 3 и 4.

Примерный код на скорую руку:
foreach ($data as $value) {
    $sheet->setCellValue($columns[$c++] . $r, $value->getData1());
    $sheet->setCellValue($columns[$c++] . $r, $value->getData2());

    $originalRowId = $r;

    $c = 2;
    $c2r = $originalRowId;
    foreach ($value->getData3() as $item3) {
                    $sheet->setCellValue($columns[$c] . $r, $item3);
                    $c2r++;
    }

    $c = 3;
    $c3r = $originalRowId;
    foreach ($value->getData4() as $item4) {
                    $sheet->setCellValue($columns[$c] . $r, $item4);
                    $c3r++;
    }
    
    $r += max(count($value->getData3()), count($value->getData4()));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы