You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.8调用Excel::create()报错:未定义方法求助

解决Maatwebsite Excel: Call to undefined method Excel::create() 错误

别慌,这个错误我碰到过好多次了——问题核心就是你用的Maatwebsite Excel版本和代码里的API不兼容!

错误原因

你写的Excel::create()是Maatwebsite Excel 2.x及更早版本的用法,但现在你安装的大概率是3.x或更高版本。新版本完全重构了导出逻辑,直接废弃了create()这个旧方法,改用了基于导出类的全新架构。

快速解决方案(推荐用新版本)

按以下几步修改代码就能搞定:

  1. 生成自定义导出类
    在终端运行Artisan命令创建导出类:

    php artisan make:export PdfDataExport
    
  2. 编辑导出类代码
    打开app/Exports/PdfDataExport.php,替换成下面的内容:

    namespace App\Exports;
    
    use Maatwebsite\Excel\Concerns\FromArray;
    use Maatwebsite\Excel\Concerns\WithTitle;
    
    class PdfDataExport implements FromArray, WithTitle
    {
        protected $pdfArray;
    
        // 通过构造函数接收要导出的数据
        public function __construct(array $pdfArray)
        {
            $this->pdfArray = $pdfArray;
        }
    
        // 返回要导出的数组数据
        public function array(): array
        {
            return $this->pdfArray;
        }
    
        // 设置工作表标题
        public function title(): string
        {
            return 'Pdf Data';
        }
    }
    
  3. 更新控制器代码
    把原来的Excel::create()部分替换成新版本的导出逻辑:

    // 记得先引入导出类和Excel门面
    use App\Exports\PdfDataExport;
    use Maatwebsite\Excel\Facades\Excel;
    
    function excel() {
        $pdf_data = DB::table('importpdfs')->get()->toArray();
        $pdf_array[] = array('Battery', 'No_of_questions_attempted', 'SAS', 'NPR', 'ST', 'GR');
        foreach($pdf_data as $pdf) {
            $pdf_array[] = array(
                'Battery' => $pdf->Battery,
                'No_of_questions_attempted' => $pdf->No_of_questions_attempted,
                'SAS' => $pdf->SAS,
                'NPR' => $pdf->NPR,
                'ST' => $pdf->ST,
                'GR' => $pdf->GR
            );
        }
    
        // 用新版本的导出方式替代旧的create方法
        return Excel::download(new PdfDataExport($pdf_array), 'Pdf Data.xlsx');
    }
    

如果你非要用旧版本API(不推荐)

要是不想重构代码,也可以降级到Maatwebsite Excel 2.x版本:

  1. 修改composer.json里的依赖:
    "maatwebsite/excel": "^2.1",
    
  2. 运行composer update更新依赖(注意可能会出现依赖冲突,需要自行调整)

这样就能继续用Excel::create()了,但还是建议升级到新版本,它性能更好、功能更多,还能得到安全更新。

内容的提问来源于stack exchange,提问作者pro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:29:14