使用Hutool生成多个excel文件合并成zip压缩包下载
这几天有个业务需要把项目里数据生成excel后打包zip下载,但之前的项目基本都是用Apache自带的poi去做,这个项目引入Hutool工具,所以就用了Hutool的功能去做了,跟之前相比感觉省事了一些。
导包的细节就不展示了,直接去Maven去找就行,直接代码吧。
1、实体
@Getter
@Setter
public class Student {private String id;private String name;private Integer age;private String sex;
}
2、映射
这里用的是tk.Mybatis
public interface StudentMappper extends Mapper<Student>{}
3、导出的实体工具类
这个类只有需要导出的excel的字段,id,创建时间之类的不用,方便后续管理excel的字段变更
public class StudentExport {private String name;private Integer age;private String sex;
}
4、Service
@Service
public class StudentService {@Autowiredprivate StudentMappper studentMappper;public List<Student> getAll(){return studentMappper.selectAll();}//创建单个excel的方法,多个excel的话,加几个这种方法就行public List<Object> createExcel() {List<Object> result=new ArrayList<Object>();List<Student> sList=getAll();List<StudentExport> exportList=new ArrayList<StudentExport>();for (Student student : sList) {StudentExport export=new StudentExport();export.setAge(student.getAge());export.setName(student.getName());export.setSex(student.getSex());exportList.add(export);}ExcelWriter writer=new ExcelUtil().getWriter();//添加表头对应的数据列writer.addHeaderAlias("name", "名字");writer.addHeaderAlias("age", "年龄");writer.addHeaderAlias("sex", "性别");writer.write(exportList,true);//格式化文件名字模板String fileName = String.format("%s-%s.xls", "student", DateUtil.format(new Date(), "yyyyMMdd"));//写入流ByteArrayOutputStream out = new ByteArrayOutputStream();writer.flush(out);//关闭writer.close();result.add(out);result.add(fileName);return result;}//循环导入excel的流,准备在Controller层生成zip包public void writeZos(List<ByteArrayOutputStream> bosList, ZipOutputStream zos,List<String> excelName) throws IOException {for (int i = 0; i < bosList.size(); i++) {//将多个excel都转成字节流写入zos.putNextEntry(new ZipEntry(excelName.get(i)));byte[] excelStream=bosList.get(i).toByteArray();zos.write(excelStream);//记得关闭zos.closeEntry();}}
}
5、Controller层
public class StudentApi {@Autowiredprivate StudentService studentService;public void createZip(HttpServletResponse response) throws IOException {List<ByteArrayOutputStream> bosList=new ArrayList<ByteArrayOutputStream>();List<String> excelName =new ArrayList<String>();//这里循环取出service里填充的单个excel流和单个excelName,如果多个循环即可bosList.add((ByteArrayOutputStream) studentService.createExcel().get(0));excelName.add((String) studentService.createExcel().get(1));//创建HttpServerResponse的输出流OutputStream out=response.getOutputStream();//创建写入流BufferedInputStream bis;//创建要写入的文件File file=new File("student.zip");//通过ZipOutputStream定义要写入的对象ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(file));//调取service层写入循环excle的方法,将流输入studentService.writeZos(bosList, zos, excelName);zos.close();//定义返回类型response.setContentType("text/html; charset=UTF-8"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode("student.zip", "UTF-8"))));bis = new BufferedInputStream(new FileInputStream("student.zip"));//定义byte,长度就是要转成zip文件的byte长度,避免浪费资源byte[] buffer=new byte[bis.available()];bis.read(buffer);out.flush();out.write(buffer);}
}
Controller通过postman或者Swagger直接调取就能生成zip下载了
使用Hutool生成多个excel文件合并成zip压缩包下载相关推荐
- 使用 easyExcel 生成多个 excel 并打包成zip压缩包
前言: 最近项目有个需求,需要生成多个 excel 并打包成 zip下载:由于需要生成的 excel 头字段过多,这里有96个时间段的表头,如果建一个有96个字段的实体不太好,还好 easyExcel ...
- java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载
假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...
- python处理多个excel文件-python多个excel文件合并成一个sheet
运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...
- pythonexcel合并多个sheet_python多个excel文件合并成一个sheet
运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...
- easyExcel导出excel文件并打包成zip压缩包下载
文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...
- Java将多个文件打包成ZIP并下载
Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...
- excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...
Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...
- 前端提效 Magic,导出多个Excel文件并打包为压缩包下载
本篇文章主要介绍使用 exceljs.file-saver.jszip实现下载包含多层级文件夹.多个 excel.每个 excel 支持多个 sheet 的 zip 压缩包. 上一篇文章:前端复杂表格 ...
最新文章
- 科研经验2:云协作建立实验室工作总结和内部资料共享平台
- WEB学习-CSS盒模型
- 【转】pDc-SelectObject(pOldBrush)恢复画刷
- tomcat启动卡住
- 存储过程里调用另一个存储过程的值
- 细说php一些常见的知识点
- C语言中常见的内存相关的Bugs
- 一)关于java的认识:
- Java保存class文件,[转载]Class文件在JVM中如何存储
- 磁盘配额超出 linux,Linux磁盘配额应用
- 【C语言】字符串、字符数组
- CocosCreator 游戏小地图/地图雷达
- 物联网已经发展多年,为什么一直不温不火
- Hi ! 哈希,Hash
- 服务器部署jdk,tomcat环境及腾讯云域名解析
- 手工编译java,手工打包, 纯手工制作
- 关联规则之购物篮分析
- bzoj4774 修路
- python中的range()函数
- html5 图形组件,数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇
热门文章
- java chmod 777_chmod 777 修改权限
- Android 一款十分简洁、优雅的日记APP
- 基于Java毕业设计安路友汽车租赁源码+系统+mysql+lw文档+部署软件
- 超火购车平台易车到底怎么样,为您解答
- Socket+MFC的聊天室
- Springboot文件上传报错:failed to convert java.lang.String to org.springframework.util.unit.DataSize
- 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能
- 【滤波专题-第3篇】IIR无限冲激响应和FIR有限冲激响应数字滤波器有什么区别?
- 柏林是哪个系统的服务器,柏林系统其实很“佛系”,明白了这些你也能玩好海缸!...
- 用函数在Excel中从文本字符串提取数字