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 的导入导出功能

使用 Laravel-Excel 和流的方法导出 Excel

laravel-excel 无法使用带有图像的刀片导出 xls 文件

laravel-excel maatwebsite/excel 新版中文文档

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)