如何在PhpSpreadsheet中循环插入数据

问题描述 投票:0回答:1

我的代码有问题。当我想使用

foreach
插入值时,但它只返回第一个数据。

我尝试过使用

fromArray()
,但我需要在某个字段合并我的单元格。当我使用
foreach
时,它只显示第一个数据。

我的代码是这样的:

public function printReport()
    {
        $data = $this->allDokumenDipinjam();

        if ($data) {
            $data = $data->values();

            $spreadsheet = IOFactory::load('format/format-laporan.xlsx');
            $worksheet = $spreadsheet->getActiveSheet();

            foreach ($data as $index => $debitur) {
                $dokumen = $debitur->dokumen->values();
                $dokumenCount = count($dokumen);
                $worksheet->mergeCells("A" . 5 + $index . ":A" . 5 + $dokumenCount - 1);
                $worksheet->getCell('A' . 5 + $index)->setValueExplicit($index + 1);
                $worksheet->mergeCells("B" . 5 + $index . ":B" . 5 + $dokumenCount - 1);
                $worksheet->getCell('B' . 5 + $index)->setValueExplicit($debitur->no_debitur);
                $worksheet->mergeCells("C" . 5 + $index . ":C" . 5 + $dokumenCount - 1);
                $worksheet->getCell('C' . 5 + $index)->setValueExplicit($debitur->nama_debitur);
            }
        }

        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('tes.xlsx');

        return response()->download('tes.xlsx')->deleteFileAfterSend(true);
    }


php laravel phpspreadsheet
1个回答
0
投票

好的@PinKevin,我认为最好在使用之前计算新的“行”号,如下所示:

public function printReport()
    {
        $data = $this->allDokumenDipinjam();

        if ($data) {
            $data = $data->values();

            $spreadsheet = IOFactory::load('format/format-laporan.xlsx');
            $worksheet = $spreadsheet->getActiveSheet();

            foreach ($data as $index => $debitur) {
                $dokumen = $debitur->dokumen->values();
                $dokumenCount = count($dokumen);

                // this is my change
                $row_index = 5 + $index;
                $row_dokumen = 5 + $dokumenCount - 1;

                $worksheet->mergeCells("A" . $row_index . ":A" . $row_dokumen);
                $worksheet->getCell('A' . $row_index)->setValueExplicit($index + 1);
                $worksheet->mergeCells("B" . $row_index . ":B" . $row_dokumen);
                $worksheet->getCell('B' . $row_index)->setValueExplicit($debitur->no_debitur);
                $worksheet->mergeCells("C" . $row_index . ":C" . $row_dokumen);
                $worksheet->getCell('C' . $row_index)->setValueExplicit($debitur->nama_debitur);
            }
        }

        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('tes.xlsx');

        return response()->download('tes.xlsx')->deleteFileAfterSend(true);
    }

如果它对您不起作用,请详细解释您的错误和目标。

© www.soinside.com 2019 - 2024. All rights reserved.