laravel8 excel导出 (本片文章推荐两种方式)

第一种简单方案 通过composer安装

插件库:maatwebsite/excel - Packagist

官网:Introduction | Laravel Excel

导出步骤: 5 minute quick start | Laravel Excel

安装对应的phpexcel插件

composer require maatwebsite/excel


注:composer需要切源操作,否则下载将可能不会成功

安装成功后,就提供生成导出数据的命令,使用此命令生成导出数据文件

php artisan make:export FangOwnerExport --model=Models/FangOwner

  生成对应的文件

laravel8 excel导出 (本片文章推荐两种方式)_第1张图片

在相对的控制器导出excel

    #引入
    use Maatwebsite\Excel\Facades\Excel;
    #导出
    public function phpexcel(){
        # 对应文件,导出标题
        return Excel::download(new FirmExport(),'news.xlsx');
    }

第二种使用将原有导出xlsx格式 转变为csv格式 可以在大数据导出时优化导出速度

详细书写一下思路,仅提供借鉴

1、创建路由

#excel导出
Route::get('bookexcel',[\App\Http\Controllers\admin\AuthController::class,'fileexcel'])->name('book.excel');

2、前端使用

laravel8 excel导出 (本片文章推荐两种方式)_第2张图片

 

3、创建公共导出方法

 在app文件下创建common文件并且创建common.php

laravel8 excel导出 (本片文章推荐两种方式)_第3张图片

 

 在composer.json文件中autoload中进行书写

laravel8 excel导出 (本片文章推荐两种方式)_第4张图片

  "files": [
           #公共方法路径
            "app/common/common.php"
        ]

刷新框架 在命令行

composer dump-autoload

以上操作就是对框架生成共类,完成后在公共类中封装一个导出方法

//判断是否有该方法
if(!function_exists('phpexcel')){
   //表头,标题,数据
    function phpexcel($cell,$title,$data){
        set_time_limit(0);
        ini_set('memory_limit', '128M');
        header('Content-Type: application/vnd.ms-execl');
        header('Content-Disposition: attachment;filename="'.$title . '.csv"');

        //以写入追加的方式打开
        $fp = fopen('php://output', 'a');
 
        foreach($cell as $key => $item) {
            $celldata[$key] = iconv('UTF-8', 'GBK//IGNORE', $item);
        }
        //将标题写到标准输出中
        fputcsv($fp, $celldata);
        foreach($data as $row){
            foreach($row as $key => $item) {
                //这里必须转码,不然会乱码
                $row[$key] = iconv('UTF-8', 'GBK//IGNORE', $item);
            }
            fputcsv($fp, $row);
        }
        $res = ['file'=>$title];
        return response()->json($res);
    }
}

4、控制其调用

   #导出
    public function fileexcel(Request $request){
        //防止数据量大内存不够
        ini_set('memory_limit', '256M');
        //自定义字段
        $cell=['id','文章标题','邮箱','加入时间'];
        //自定义导出文件名
        $title = $request->input('title','文章列表');
        $title = $title.date('YmdHis');
        //此方法为导出数据来源,在库文件里,你可根据自己需要的数据查数据库
        $res=Auths::get()->toarray();
        $data=[];
        foreach ($res as $k=>$v){
            $data[$k][]=$v['id'];
            $data[$k][]=$v['auth_name'];
            $data[$k][]=$v['auth_email'];
            $data[$k][]=$v['created_at'];
        }
        //导出表格
         return phpexcel($cell,$title,$data);
    }

你可能感兴趣的:(入门,laravel)