@lockz
Веб разработчик

Как можно сделать шаблонизацию Excel на PHP?

Система написана на PHP, отчеты выгружаются в Excel (xlsx) используя PHPSpreadSheet. Необходимо написать вложенные циклы. С циклами без вложений проблем нет, а вот как сделать 2 вложения в циклах непонятно.
Массив выглядит примерно так:
$a = [
    [
        'id'   => 1,
        'name' => 'Test',
        'items' => [
            [
                'label' => 'item 1',
                'price' => 4000,
            ]
        ]
    ],
    [
        'id'   => 2,
        'name' => 'Test 2',
        'items' => [
            [
                'label' => 'item 1',
                'price' => 4000,
            ],
            [
                'label' => 'item 2',
                'price' => 3000,
            ]
        ]
    ]
];

Шаблон который я смог придумать вот так:
5e1d623276e10866726361.jpeg

Есть у кого нибудь идеи как это реализовать?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Не думаю, что получится подобным образом шаблонизировать циклы. Я подобного не встречалc в PhpSpreadsheet.
Вы можете делать вставку N строк(1) с последующим их наполнением(2):
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($template);

if ($rowsCurrentPeriod) {
    $sheet = $spreadsheet->setActiveSheetIndex(1);
    if (($count = count($rowsCurrentPeriod)) > 2) {
        $sheet->insertNewRowBefore(8, $count - 2); # <-- 1
    }
    $sheet->fromArray($rowsCurrentPeriod, null, 'A7', true); # <-- 2
}

$spreadsheet->setActiveSheetIndex(0);
$writer = new Xlsx($spreadsheet);
$writer->save($filepath);
Ответ написан
Ваш ответ на вопрос

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

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