首页 > 解决方案 > 使用 Laravel Excel 和视图导出多张工作表,每张工作表有 100 条记录

问题描述

我在使用 laravel excel 使用视图导出多张工作表时遇到问题。

从工作表 1 导出到另一工作表的结果。例如,我有 750 条记录,我的代码可以创建 8 张工作表,但每张工作表都有相同的记录(100 条记录/工作表)

这是我的代码

class PerhitunganPensiunPerSheet implements FromView, ShouldAutoSize
{
    use Exportable;

    protected $bank;
    protected $month;
    protected $year;

    public function __construct(string $bank, string $month, string $year)
    {
        $this->bank = $bank;
        $this->month = $month;
        $this->year = $year;
    }

    public function view(): View
    {
        $setting = Setting::first();
        $bulan = strtoupper(DateTime::createFromFormat('!m',$this->month)->format('F'));
        $results = TaxBenefitDetail::select(DB::raw('tax_benefit_details.id,case when length(retireds.code)<10 then lpad(retireds.code,9,"0") else retireds.code end as code,retireds.name,banks.bank_code,retireds.bank_account_no,tax_benefit_details.mp_paid_this_month,"MP BERKALA BLN '.$bulan.' ' .$this->year.'" as memo'))
                        ->join('tax_benefits','tax_benefits.id','=','tax_benefit_details.tax_benefit_id')
                        ->join('retireds','retireds.id','=','tax_benefit_details.pansion_id')
                        ->join('banks','banks.id','=','retireds.bank_id')
                        ->where([
                            ['retireds.bank_id','=',$this->bank],
                            ['tax_benefits.month_id','=',$this->month],
                            ['tax_benefits.year_id','=',$this->year],
                        ])
                        ->get();
        $resData = [];
        $resultData = [];
        
        $resData = $results->chunk(1000);
        
        foreach($resData as $dataStore){
            $viewData = [
                'results' => $dataStore->toArray(),
                'setting' => $setting,
                'title' => 'DAFTAR TRANSFER',
                'bulan' => $bulan,
                'tahun' => $this->year,
            ];
            $resultData[] = $viewData;
        }

        //looping per 1000 data
        foreach($resultData as $x => $data){
            return view('finances.pembayaran.pph.excels.bank', $data->toArray());
        }
        
    }
}

上面的代码创建多个工作表

class PerhitunganPensiunExport implements WithMultipleSheets
{
    use Exportable;

    protected $bank;
    protected $month;
    protected $year;

    public function __construct(string $bank, string $month, string $year)
    {
        $this->bank = $bank;
        $this->month = $month;
        $this->year = $year;
    }

    public function sheets(): array
    {
        $sheets = [];
        $pensiunan = TaxBenefitDetail::select(DB::raw('tax_benefit_details.id'))
                        ->join('tax_benefits','tax_benefits.id','=','tax_benefit_details.tax_benefit_id')
                        ->join('retireds','retireds.id','=','tax_benefit_details.pansion_id')
                        ->join('banks','banks.id','=','retireds.bank_id')
                        ->where([
                            ['retireds.bank_id','=',$this->bank],
                            ['tax_benefits.month_id','=',$this->month],
                            ['tax_benefits.year_id','=',$this->year],
                        ])
                        ->get();

        if(!empty($pensiunan)){
            $jmlSheets = intval($pensiunan->count()/1000);
            $tambahanSheets = $pensiunan->count() % 1000;
            if($tambahanSheets > 0){
                $addSheets = 1;
            }else{
                $addSheets = 0;
            }
            $totalSheets = ($jmlSheets + $addSheets);
        }
        for ($data = 1; $data <= $totalSheets ; $data++) {
            $sheets[] = new PerhitunganPensiunPerSheet($this->bank ,$this->month, $this->year , $data);
        }
        return $sheets;
    }
}

标签: phplaravel

解决方案


推荐阅读