直接运行 composer require maatwebsite/excel 即可安装,但需确保 Laravel 与 PHP 版本匹配(如 Laravel 10 对应 ^3.4、PHP ≥8.0),Laravel 9+ 无需手动注册服务提供者,Laravel 8 及更早需在 config/app.php 中添加 ServiceProvider 和 Excel 门面,执行 php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" 生成配置文件,并注意上传文件路径、临时目录权限及内存配置。

直接运行 composer require maatwebsite/excel 就行,但得先确认 Laravel 版本和 PHP 版本匹配
这个命令是安装 Laravel Excel 的标准方式,但它不是“放之四海皆准”的。关键看你的环境是否满足依赖要求:
composer require maatwebsite/excel会自动拉取与当前 Laravel 主版本兼容的最新子版本,比如 Laravel 10.x 默认装
^3.4,而 Laravel 9.x 通常对应 ^3.3。如果你用的是 Laravel 11(PHP 8.2+),目前官方尚未发布正式支持的稳定版,强行装可能报 requirement not met 错误。
常见卡点:
-
maatwebsite/excelv3.x 要求 PHP >= 8.0,Laravel 9/10;v2.x 已废弃,不支持 Laravel 8+; - 如果项目里已存在
phpoffice/phpspreadsheet且版本太老(如^1.18),composer require可能因冲突中断; - 国内源没切对时,会卡在
Loading composer repositories或提示Could not fetch。
Laravel Excel 安装后必须手动注册服务提供者(Laravel 8 及更早版本)
从 Laravel 5.5 到 Laravel 8,该包不支持自动发现(auto-discovery),漏掉这步会导致 Excel::import() 找不到类、抛出 Class 'Excel' not found。
你需要手动编辑 config/app.php,在 'providers' 数组里加一行:
Maatwebsite\Excel\ExcelServiceProvider::class,
同时在 'aliases' 里补上门面:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
注意:Laravel 9+ 默认启用包自动发现,这一步可跳过——但如果你关了 Composer\Autoload\ClassLoader::register() 或自定义了 composer.json 的 autoload-dev,仍可能失效。
执行 php artisan vendor:publish 时要选对 tag,否则配置文件不生成
安装完运行 php artisan vendor:publish,它会列出所有可发布的资源。Laravel Excel 的配置文件叫 excel.php,但默认不会单独弹出,得靠 tag 筛选:
- 运行
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"最稳妥; - 如果只输
php artisan vendor:publish,然后从列表里手选,要找编号含maatwebsite/excel或描述为excel config的那一项; - 漏掉这步,
config/excel.php不会出现,后续调Excel::queue()或改导出内存限制就会用默认值,容易 OOM 或超时。
生成后的配置文件里重点关注 'cache' => ['driver' => 'redis'] 和 'exports' => ['chunk_size' => 1000],这两个直接影响大文件导入性能。
使用 Excel::import() 前务必检查文件上传路径和临时权限
很多人写完 Excel::import(new UsersImport, $request->file('users')) 报 File not found 或 Unable to open file,其实问题不在代码,而在 Laravel 文件上传机制:
-
$request->file('users')返回的是Illuminate\Http\UploadedFile实例,它指向的是 PHP 临时目录(如/tmp/phpXXXXXX),不是你想象中的原始路径; - Laravel Excel 内部会尝试 move 该临时文件到缓存目录再解析,若
storage/framework/cache/data/不可写,或upload_max_filesize在 php.ini 中设得太小(如 2M),就会失败; - 推荐做法:先用
$request->file('users')->store('imports')存到storage/app/imports/,再传绝对路径给Excel::import(),更可控。
另外,.xlsx 文件比 .csv 更占内存,10 万行数据用 XlsxReader 可能吃掉 512MB 内存,这时候得开 'chunk' => true 配合 WithChunkReading 接口。










