欢迎大家来到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直接编辑,完美地避开了代码编写样式的雷区,同时指令的支持,也提了模板的有效性。创建的模板示例如图所示:
基本语法如下:
- 空格分割
- 三目运算 {{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