php - 使用 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;
}
}