前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 后台批量导出 Excel 文件,示例代码

Laravel 后台批量导出 Excel 文件,示例代码

作者头像
泥豆芽儿 MT
发布2024-05-31 12:39:20
660
发布2024-05-31 12:39:20
举报
  • 背景 系统因为用户量的不断增加,对于订单数据的导出会发现: 每次导出几千条数据,有时超时,有时溢出内存 所以一定要进行优化

Laravel Excel 文档

  • 框架
代码语言:javascript
复制
    - laravel 5.8.40
	- Linux
  • 实现思路
代码语言:javascript
复制
1. 使用 后台队列监听模式,导出订单数据
2. 每次导出的数据量,要求不能超过 5000 (因为订单数据关联多表,处理逻辑较复杂)
3. 减少 join 的连接使用
4. 每次导出一页的数据,每页1000条
5. 定时监听,当前导出任务是否完成,如果没有完成会继续导出下一页的数据
6. 初次导出,会生成 xlsx文件,第二页开始进行数据的拼接
7. 后台 列表显示每次导出的完成情况,只有全部数据导出,才可下载,如果有异常报错,可备注记录

前期准备

    1. 安装导出ExceL扩展

composer require maatwebsite/excel

    1. 使用下面命令生成导出文件

php artisan make:export CommonExport

代码处理

  • 核心代码
代码语言:javascript
复制
    /**
     * @notes:拼接excel 数据
     * @param $title
     * @param $cellData
     * @param int $curr_page
     * @param string $sheetName
     * @param string $ext
     * @return string
     * @author: zhanghj
     * @Time: 2024/5/29 13:57
     */
    public function appendExcel($title, $cellData,$curr_page = 0,
                                $ext = 'xlsx',$sheetName = 'sheet1'){
        // 如果文件不存在,则创建文件,否则追加数据
        $filePath = storage_path("app/public/exports/{$title}.{$ext}");
        if (file_exists($filePath)) {
           // var_dump($title.'-数据追加 ...Page:'.$curr_page);
            //进行数据追加
            Excel::load($filePath,function ($excel) use ($cellData, $sheetName) {
                $excel->sheet($sheetName, function ($sheet) use ($cellData) {
                    foreach ($cellData as $cd){
                        $sheet->appendRow($cd);
                    }
                });
            })->store($ext);
        } else {
            Excel::create($title, function ($excel) use ($cellData, $sheetName) {
                $excel->sheet($sheetName, function ($sheet) use ($cellData) {
                    $sheet->rows($cellData);
                });
            })->store($ext); // 文件默认保存到storage/exports目录下
        }
    }

  • 附录
  1. laravel实现大数据csv导出
  2. laravel 导入/导出Excel
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前期准备
  • 代码处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档