laravel-excel导入导出
Posted 梦忘川
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel-excel导入导出相关的知识,希望对你有一定的参考价值。
安装 composer require maatwebsite/excel 注意3.0与2.0几乎完全不同的,文档也不同 3.1文档: https://laravel-excel.maatwebsite.nl/3.1/getting-started/ 1.导出 推荐导出文档: https://blog.csdn.net/beyond__devil/article/details/83008782 https://blog.csdn.net/u010324331/article/details/83658747 构造类 use AppExtensionsmyappModelsGoods; //商品model use MaatwebsiteExcelConcernsFromCollection; //excel表单字段集 必备 use MaatwebsiteExcelConcernsWithHeadings; //excel标题行 class GoodsExport implements FromCollection, WithHeadings { public function __construct($post) { $this->post = []; if(is_array($post) && count($post)>0) { $this->post = $post; } } public function collection() { // return Goods::select(‘goods_name‘,‘price‘,‘stock‘)->get();// 查询数据直接返回 } public function headings(): array { //表格列头标题 WithHeadings return array( ‘商品名‘, ‘售价‘, ‘库存‘); } } 调用 实例化的时候可以通过构造函数传递参数, 用于数据库查询 use Excel; use AppExtensionsmyappControllersAdminExcelGoodsExport; public function exportGoods(Request $request) { return Excel::download(new GoodsExport($request->all()), ‘商品导出表.xlsx‘); } 2.导入 // 注意导入文件数据量可能过大,因此最好通过队列执行,每次导入一部分,通过标记跳过已导入的部分 构造类 use MaatwebsiteExcelConcernsToCollection; use IlluminateSupportCollection; use AppExtensionsmyappJobsProductImportQueue; // 队列 use AppExtensionsmyappModelsProduct; class ProductImport implements ToCollection { public $path; public function __construct($path) { $this->path = $path; } public function collection(Collection $rows) { // 缓存读取已导入数量 // 循环导入100条 // 若未导入完成,记录缓存,并重新创建队列 (或者重新执行队列?) // dispatch(new ProductImportQueue($this->path)); } } 调用 use IlluminateSupportFacadesStorage; use AppExtensionsmyappControllersAdminExcelProductImport; use Excel; public function importProduct(Request $request) { $file = $request->file(‘goods_excel‘); // 通过laravel的request获取文件 if ($file && $file->isValid()) { // 获取文件相关信息 $originalName = $file->getClientOriginalName(); // 文件原名 $ext = $file->getClientOriginalExtension(); // 扩展名 // $realPath = $file->getRealPath(); //临时文件的绝对路径 // $type = $file->getClientMimeType(); // image/jpeg if($ext!=‘xlsx‘ && $ext!=‘xls‘){ return $this->responseAjax(‘fail‘,‘请上传excel文件‘); } $filename = $originalName; if(Storage::disk(‘public‘)->exists(‘uploads/‘.$filename)) { return $this->responseAjax(‘fail‘,‘文件已上传‘); } // 上传文件 存于服务器 Storage::disk(‘public‘)->makeDirectory(‘uploads‘); Storage::disk(‘public‘)->putFileAs(‘uploads‘,$file,$filename); //执行同步 $path = ‘public/uploads/‘.$filename; Excel::import(new ProductImport($path), $path); // use AppExtensionsmyappJobsProductImportQueue; // dispatch(new ProductImportQueue($path)); 加入队列 } }
以上是关于laravel-excel导入导出的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel-Excel 和流的方法导出 Excel
laravel-excel 无法使用带有图像的刀片导出 xls 文件
laravel-excel maatwebsite/excel 新版中文文档