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()这个旧方法,改用了基于导出类的全新架构。
快速解决方案(推荐用新版本)
按以下几步修改代码就能搞定:
生成自定义导出类
在终端运行Artisan命令创建导出类:php artisan make:export PdfDataExport编辑导出类代码
打开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'; } }更新控制器代码
把原来的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版本:
- 修改
composer.json里的依赖:"maatwebsite/excel": "^2.1", - 运行
composer update更新依赖(注意可能会出现依赖冲突,需要自行调整)
这样就能继续用Excel::create()了,但还是建议升级到新版本,它性能更好、功能更多,还能得到安全更新。
内容的提问来源于stack exchange,提问作者pro
相关产品推荐
相关产品推荐

