Level 75
Nov 20, 2023
3
Level 1
Laravel Excel Export - Data Not Starting from Row 9
Hello Laracasts community,
I'm encountering an issue with a Laravel Excel export where the data doesn't start from row 9 as expected. I have a specific case where I want to export data from a database using the Maatwebsite Excel package. The data is retrieved correctly, but when exported, it starts from row 5 instead of row 9.
I've tried different approaches, including adjusting the start row and using the Collection index directly, but the problem persists. Here is the relevant code snippet:
<?php
namespace App\Exports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithCustomStartCell;
use Maatwebsite\Excel\Events\AfterSheet;
use App\Models\Mutidbill;
class RekonExport implements FromCollection, WithStyles, WithColumnWidths
{
/**
* @return \Illuminate\Support\Collection
*/
public function columnWidths(): array
{
return [
'A' => 9.68,
'B' => 38.86,
'C' => 21.86,
'D' => 9.43,
'E' => 34.14,
'F' => 20.57,
'G' => 35.29,
'H' => 16.43,
'I' => 11.86,
'J' => 22.43,
'K' => 14.57,
'L' => 17,
'M' => 41.71,
'N' => 12.29,
'O' => 21.57,
'P' => 21.57,
'Q' => 18,
'R' => 17.71,
'S' => 18.57,
'T' => 48.57,
];
}
public function collection(Worksheet $sheet)
{
$data = Mutidbill::select('NO_SPM','NILBELANJAPJK','KD_REK','AKUN','NMKELPOT','NOMINAL','NPWP','NTPN')->where('SATK','=', auth()->user()->SATK)->get();
$collection = new Collection();
$startRow = 9;
foreach ($data as $item) {
$collection ->push([
'A' => '',
'B' => $item->NO_SPM,
'C' => $item->NILBELANJAPJK,
'D' => '',
'E' => '',
'F' => '',
'G' => '',
'H' => $item->KD_REK,
'I' => $item->AKUN,
'J' => $item->NMKELPOT,
'K' => $item->NOMINAL,
'L' => $item->NPWP,
'M' => '',
'N' => '',
'O' => $item->NTPN,
'Q' => $item->NOMINAL,
]);
if ($startRow < 9) { for ($i=1; $i <=(9 - $startRow); $i++) { $collection->push([]);
}
$startRow = 9;
}
$startRow++;
}
return $collection;
}
public function styles(Worksheet $sheet)
{
$sheet->getRowDimension(7)->setRowHeight(34.5);
$sheet->getRowDimension(8)->setRowHeight(34.5);
$sheet->getRowDimension(9)->setRowHeight(38.25);
$sheet->mergeCells('A1:R1');
$sheet->mergeCells('A2:R2');
$sheet->mergeCells('A3:R3');
$sheet->mergeCells('A4:R4');
$sheet->mergeCells('A7:A8');
$sheet->mergeCells('B7:C7');
$sheet->mergeCells('D7:F7');
$sheet->mergeCells('H7:K7');
$sheet->mergeCells('G7:G8');
$sheet->mergeCells('L7:L8');
$sheet->mergeCells('M7:M8');
$sheet->mergeCells('N7:N8');
$sheet->mergeCells('O7:O8');
$sheet->mergeCells('P7:P8');
$sheet->mergeCells('Q7:Q8');
$sheet->mergeCells('R7:R8');
$sheet->mergeCells('S7:S8');
$sheet->mergeCells('T7:T8');
$styleArray = [
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
],
'font' => [
'name' => 'Berlin Sans FB Demi',
'bold' => true,
],
];
$styleHeader = [
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'wrapText' => true,
],
'font' => [
'name' => 'Calibri',
'bold' => true,
'size' => '10'
],
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
];
$styleValue = [
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'wrapText' => true,
],
'font' => [
'name' => 'Calibri',
'size' => '10'
],
'borders' => [
'inside' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
];
$sheet->getStyle('A1:R1')->applyFromArray($styleArray);
$sheet->getStyle('A2:R2')->applyFromArray($styleArray);
$sheet->getStyle('A3:R3')->applyFromArray($styleArray);
$sheet->getStyle('A4:R4')->applyFromArray($styleArray);
$sheet->getStyle('A7:S8')->applyFromArray($styleHeader);
$sheet->getStyle('A9:T9')->applyFromArray($styleValue);
$sheet->setCellValue('A1', 'DAFTAR TRANSAKSI HARIAN BELANJA DAERAH (DTH)');
$sheet->setCellValue('A2', 'KOTA PROBOLINGGO');
$sheet->setCellValue('A3', 'BULAN JANUARI - JUNI');
$sheet->setCellValue('A4', 'TAHUN ANGGARAN 2023');
$sheet->setCellValue('A7', 'NO.');
$sheet->setCellValue('B7', 'SPM');
$sheet->setCellValue('B8', 'NOMOR');
$sheet->setCellValue('C8', 'NILAI BELANJA');
$sheet->setCellValue('D7', 'SP2D');
$sheet->setCellValue('D8', 'TGL SP2D');
$sheet->setCellValue('E8', 'NOMOR');
$sheet->setCellValue('F8', 'NILAI BELANJA');
$sheet->setCellValue('G7', 'KETERANGAN');
$sheet->setCellValue('H7', 'POTONGAN PAJAK');
$sheet->setCellValue('H8', 'KODE AKUN');
$sheet->setCellValue('I8', 'AKUN PAJAK');
$sheet->setCellValue('J8', 'JENIS PAJAK');
$sheet->setCellValue('K8', 'JUMLAH');
$sheet->setCellValue('L7', 'NPWP REKANAN / BENDAHARA');
$sheet->setCellValue('M7', 'NAMA REKENING REKANAN/ BENDAHARA');
$sheet->setCellValue('N7', 'NOMOR REKANAN / BENDAHARA');
$sheet->setCellValue('O7', 'NTPN');
$sheet->setCellValue('P7', 'DPP SEHARUSNYA');
$sheet->setCellValue('Q7', 'POTONGAN PAJAK YANG SEHARUSNYA');
$sheet->setCellValue('R7', 'TARIF');
$sheet->setCellValue('S7', 'NTPN VALID/INVALID');
$sheet->setCellValue('T7', 'KETERANGAN');
}
}
Level 1
i use
use Maatwebsite\Excel\Concerns\WithCustomStartCell;
class RekonExport implements FromCollection, WithStyles, WithColumnWidths, WithCustomStartCell
{
public function startCell(): string
{
return 'A9';
}
}
1 like
Please or to participate in this conversation.