LARAVEL 9:如何使用 maatwebsite 根据过滤器数据(id、月份和年份)将数据导出到 excel

LARAVEL 9: How to export data to excel based on filter data (id, month and years) using maatwebsite

提问人:akhiratunnisa 提问时间:12/16/2022 更新时间:12/16/2022 访问量:1422

问:

我正在根据employee_id过滤器、缺席月份和年份将数据导出到 excel:filter data

提交筛选器后,数据将显示在下表中:data

我已经设法获取了数据,但是当单击“下载 Excel”按钮时,内容只是空的 Excel,如下所示:excel

数据不会进入 Excel。

我的控制器:

 public function rekapabsensiExcel(Request $request)
{
    $idkaryawan = $request->id_karyawan;
    $bulan      = $request->query('bulan',Carbon::now()->format('m'));
    $tahun      = $request->query('tahun',Carbon::now()->format('Y'));

    // simpan session
    $idkaryawan = $request->session()->get('idkaryawan');
    $bulan      = $request->session()->get('bulan');
    $tahun      = $request->session()->get('tahun',);

    // dd($idkaryawan,$bulan,$tahun );

    if(isset($idkaryawan) && isset($bulan) && isset($tahun))
    {
        $data = Absensi::where('id_karyawan', $idkaryawan)
        ->whereMonth('tanggal', $bulan)
        ->whereYear('tanggal',$tahun)
        ->get();
        // dd($data);
    }else{
        $data = Absensi::all();
    }
    return Excel::download(new RekapabsensiExport(['data'=>$data, 'idkaryawan'=>$idkaryawan]),'rekap_absensi_bulanan.xlsx');
}

我的RekapAbsensiExport.php:

<?php

 namespace App\Exports;

 use App\Models\Absensi;
 use Maatwebsite\Excel\Concerns\FromCollection;

class RekapabsensiExport implements FromCollection
{
protected $id_karyawan;

// function __construct($id_karyawan) {
//     $this->id_karyawan = $id_karyawan;
// }
 public function headings(): array {
    return [
        "No. ID","ID Karyawan","NIK","Tanggal","Jam Kerja","Jam Masuk","Jam Pulang",
        "Scan Masuk","Scan Pulang","Normal","Riil","Terlambat","Plg Cepat","Absent",
        "Lembur","Jml Jam Kerja","pengecualian","Harus C/I","Harus C/O","Departemen",
        "Hari Normal","Akhir Pekan","Hari Libur","Jml Kehadiran","Lembur Hari Normal",
        "Lembur Akhir Pekan","Lembur Hari Libur"
    ];
}
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
    return Absensi::where('id_karyawan',$this->id_karyawan)->get();
}
} 

我出错了哪一部分?请帮忙

Laravel 导出到 MaatWebsite-Excel 数据过滤

评论

0赞 matticustard 12/16/2022
您当前正在将值数组传递给 Export 类。但是,注释掉的构造函数仅配置为接受单个参数。
0赞 akhiratunnisa 12/16/2022
你有这样的问题的示例代码吗?

答:

0赞 matticustard 12/16/2022 #1

目前,您没有收到对此语句的响应,因为您没有正确传递该值。$this->id_karyawannull

return Absensi::where('id_karyawan', $this->id_karyawan)->get();

上面,您将值数组传递给 Export 类。但是,注释掉的构造函数仅配置为接受单个参数。如果我们坚持使用单个参数,你可以做这样的事情。

return Excel::download(new RekapabsensiExport($data, $idkaryawan),'rekap_absensi_bulanan.xlsx');

然后,导出构造函数将如下所示。

protected $data;
protected $id_karyawan;

function __construct($data, $id_karyawan) {
    $this->data = $data;
    $this->id_karyawan = $id_karyawan;
}

评论

0赞 akhiratunnisa 12/16/2022
我收到这样的错误:函数 App\Exports\RekapabsensiExport::__construct() 的参数太少,第 1 行传递到 C:\laragon\www\hrms\app\Http\Controllers\admin\AbsensiController.php 第 244 行,预计正好是 2