Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

bcoder72's avatar

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');
    }
}
0 likes
3 replies
bcoder72's avatar
bcoder72
OP
Best Answer
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.