我的代码有问题。当我想使用
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);
}
好的@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);
}
如果它对您不起作用,请详细解释您的错误和目标。