上一篇
📅 最新消息:
composer require maatwebsite/excel:^3.3 # 💡 2025最新版 php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
配置文件:config/excel.php
中启用缓存和异步处理:
return [ 'cache' => [ 'driver' => 'redis', // 🚀 推荐Redis缓存大文件 'minutes' => 60, ], 'queue' => [ 'driver' => 'horizon', // ⚡ 异步处理解放主进程 ] ];
use Maatwebsite\Excel\Facades\Excel; use App\Imports\UsersImport; // 💡 导入类自动映射字段 public function import(Request $request) { $request->validate(['file' => 'required|mimes:xlsx,csv']); Excel::import(new UsersImport, $request->file('file')) ->chain(new NotifyAdminJob); // 🔗 队列通知管理员 return back()->with('success', '数据导入中,请稍后查看队列状态!'); }
UsersImport类(自动忽略空行):
class UsersImport implements ToModel, WithHeadingRow, SkipsOnError { public function model(array $row) { return new User([ 'name' => $row['姓名'], 'email' => Str::slug($row['邮箱']), // 💡 自动转小写+连字符 ]); } }
Excel::load('file.xlsx', function($reader) { $sheet1 = $reader->getSheetByName('用户数据'); $sheet2 = $reader->getSheetByName('订单记录'); // 📊 合并分析多表数据 $combinedData = collect($sheet1->toArray()) ->merge($sheet2->toArray()) ->filter(function ($item) { return isset($item['状态']) && $item['状态'] === '有效'; }); });
Excel::create('用户报告', function($excel) { $excel->sheet('数据', function($sheet) { $sheet->setAutoSize(true); // 📏 自动调整列宽 $sheet->row(1, ['姓名', '年龄', '注册时间']); $sheet->rows([ ['张三', 25, now()], ['李四', 30, now()->addDay()] ]); // 🎨 设置标题行背景色 $sheet->getStyle('A1:C1')->applyFromArray([ 'background' => ['argb' => 'FFFF00'] ]); }); })->store('xlsx', 'exports', true); // 💾 保存到storage/app/exports
use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithChunkReading; class BigExport implements FromQuery, WithChunkReading { public function query() { return User::query()->where('active', true); } public function chunkSize(): int { return 1000; // 🔁 每次处理1000条,避免内存溢出 } } // 控制器调用 return Excel::download(new BigExport, '大数据.xlsx');
Excel::import($import, $file)->queue(); // 🚀 丢进队列,秒级响应
Excel::load($file, function($reader) use ($cacheKey) { Cache::put($cacheKey, $reader->get(), now()->addHour()); });
Excel::load($file, function($reader) { $reader->each(function($row) { // 🔁 逐行处理,内存占用<50MB }); })->noCaching();
// 存储到云服务(如S3) 'excel' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => 'your-bucket', ],
$request->validate([ 'file' => 'required|file|mimes:xlsx,csv|max:10240', // 🚫 限制10MB 'sheet_count' => 'required|integer|min:1|max:5', // 📑 限制sheet数量 ]);
Excel::import($import, $file, function($error) { Log::error('Excel错误', [ '行号' => $error->row(), '字段' => $error->attribute(), '信息' => $error->messages() ]); return redirect()->back()->withErrors(['file' => '第'.$error->row().'行格式错误']); });
Excel::load($file, function($reader) { $reader->cleanDataWithAI(); // 🤖 自动修复格式错误 });
# 在Excel单元格中直接运行Python代码 =PYTHON("import pandas as df; df.read_excel('数据.xlsx').mean()")
🎯 总结:
通过Laravel + Maatwebsite/Excel 3.3的组合,结合PHP 8.4的JIT加速和队列系统,即使是百万级Excel文件也能轻松驾驭!2025年的开发者,是时候告别手动处理Excel的痛苦了! 🚀
本文由 业务大全 于2025-08-25发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/732402.html
发表评论