栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java大数据量导出excel(easypoi、easyexcel)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java大数据量导出excel(easypoi、easyexcel)

文章目录
    • 前言
    • 需求
    • 实现
    • 写在最后

前言

java大数据量导出excel,谨以此篇博客和大家分享下。

需求

需要导出几十万甚至几百万数据到excel。

实现

HouseInfoVO.java

@Data
public class HouseInfoVO {
	@Excel(name = "id")
    private Long id;
    @Excel(name = "编码")
    private String code;
}

关键代码:

List houseInfoVOS = houseInfoService.test(houseInfoQueryDTO);
Workbook workbook = ExcelExportUtil.exportBigExcel(new ExportParams(null, "1"), HouseInfoVO.class, houseInfoVOS);

ExportParams两个参数:
第一个:标题行名称(设为null代表没有标题行,有的话会在excel第一行展示)
第二个:sheet名称

调用excel导出浏览器方法

private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
    try {
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setHeader("content-Type", "application/vnd.ms-excel");
        workbook.write(response.getOutputStream());
    } catch (IOException e) {
        throw new ServiceException(e.getMessage());
    }
}

上面提供了 EasyPoi的exportBigExcel导出大数据量方法,我试过16w数据导出只要10s左右,如果你导出时间过长可能是你查询数据库耗时过长,需要sql优化了,有时间的话可以研究下阿里的EasyExcel。

这里提供另一种思路:如果数据量过大,可以采取分sheet页导出,比如每个sheet导十万导多个sheet页

实现代码:

try {
           
     List> sheets = new ArrayList>();
       
     for(int i = 0;i<10;i++) {
         Map sheet = new HashMap();
         	// 外卖满减红包、饿了么红包、淘票票电影券、支付宝消费红包关注下方公众号
         	// 干饭必备外卖神券
            List entity = new ArrayList();//构造对象等同于@Excel
            
            entity.add(new ExcelExportEntity("性别", "sex"));
            entity.add(new ExcelExportEntity("姓名", "name"));
            
            List> list = new ArrayList>();
            Map h1 = new HashMap();
            h1.put("name", "name" + i);
            h1.put("sex", "sex" +  i);
            Map h2 = new HashMap();
            h2.put("name", "name" +i+i);
            h2.put("sex", "sex" +i+i);
            list.add(h1);
            list.add(h2);
            
            sheet.put(NormalExcelConstants.CLASS, ExcelExportEntity.class);
            sheet.put(NormalExcelConstants.DATA_LIST, list);
            sheet.put(NormalExcelConstants.PARAMS, new ExportParams(null, "sheet"+i));
            sheet.put(NormalExcelConstants.MAP_LIST, entity);
            sheets.add(sheet);
        }
        
      Workbook workbook = new HSSFWorkbook();
      
         for(Map map : sheets) {
             ExcelExportService server = new ExcelExportService();
            ExportParams param = (ExportParams) map.get("params");
           @SuppressWarnings("unchecked")
List entity = (List) map.get("mapList");
             Collection data = (Collection) map.get("data");
            server.createSheetForMap(workbook, param, entity, data);
         }

        FileOutputStream fos = new FileOutputStream("D:/ExcelExportForMap.tt.xls");
        workbook.write(fos);
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();

写在最后

非常感谢大家的认真阅读,如果有其他好代码技巧都可以和我交流哦,如有不足,还望各位看官多批评指正=_=
技术交流秋秋群:719023986

微x关注:干饭必备外卖神券,每天领大额卷
微x关注:正好想买,自助查桃宝京d卷

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318683.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号