springboot实现批量导出多个excel表格并压缩zip

springboot实现批量导出多个excel表格并压缩zip分享不易 喜欢请关注导出多个 Excel 文件 并压缩成 zip 包的功能 这是很多业务系统都需要的功能 本文将结合 easypoi 实现 导入 easypoi 项目 dependency groupid cn groupid dependency

欢迎大家来到IT世界,在知识的湖畔探索吧!

分享不易,喜欢请关注

导出多个Excel文件,并压缩成zip包的功能,这是很多业务系统都需要的功能。本文将结合easypoi实现。

导入easypoi项目

<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.2.0</version> </dependency>

欢迎大家来到IT世界,在知识的湖畔探索吧!

创建Excel模板

模板是处理复杂Excel的简单方法,复杂的Excel样式,可以用Excel直接编辑,完美地避开了代码编写样式的雷区,同时指令的支持,也提了模板的有效性。创建的模板示例如图所示:

springboot实现批量导出多个excel表格并压缩zip

excel模板

基本语法如下:

  • 空格分割
  • 三目运算 {{test ? obj:obj2}}
  • n: 表示 这个cell是数值类型 {{n:}}
  • le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
  • fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
  • fn: 格式化数字 {{fn:(obj;.00)}}
  • fe: 遍历数据,创建row
  • !fe: 遍历数据不创建row
  • $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
  • #fe: 横向遍历
  • v_fe: 横向遍历值
  • !if: 删除当前列 {{!if:(test)}}
  • 单引号表示常量值 ” 比如’1′ 那么输出的就是 1
  • &NULL& 空格
  • ]] 换行符 多行遍历导出
  • sum: 统计数据

CBFile模板类

不同的数据,可能需要定制不一样的模板。因此,可以定制一个模板类,以实现对模板数据的管理:

欢迎大家来到IT世界,在知识的湖畔探索吧!@Data public class CBFile { private Integer id;//保存的数据库里模板文件的标识 private String name;//模板名称 private String url;//储存地址 } 

构建导出excel方法并压缩

//datas为需要导出的数据,其中key为压缩包里的Excel文件名,value是数据 //name为压缩包名称 public void downZip(Map<String,Map<String,Object>> datas,String name) throws IOException { response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment;filename="+name+".zip"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ZipOutputStream zos = new ZipOutputStream(bos); ServletOutputStream out = response.getOutputStream(); for(String key:datas.keySet()) { Map<String,Object> data=datas.get(key); String path=getFilePath((Integer) data.get("fileId"));//这是获得模板文件路径的方法,根据实际情况修改。fileId对应的是上面的文件id TemplateExportParams params=new TemplateExportParams(path); //使用模板生成excel文件 Workbook workbook=ExcelExportUtil.exportExcel(params, data); //存放在压缩包里 ZipEntry zipEntry = new ZipEntry(name+"/"+key+".xlsx"); zos.putNextEntry(zipEntry); workbook.write(new NonCloseableOutputStream(zos)); //bos.writeTo(zos); zos.closeEntry(); } zos.close(); byte[] bytes = bos.toByteArray(); //setting content-type and zip file name response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename="+name+".zip"); out.write(bytes); out.flush(); }

分享不易,喜欢请点关注

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/97037.html

(0)
上一篇 2024年 12月 13日 上午7:23
下一篇 2024年 12月 13日 上午7:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信