这几天有个业务需要把项目里数据生成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压缩包下载相关推荐

  1. 使用 easyExcel 生成多个 excel 并打包成zip压缩包

    前言: 最近项目有个需求,需要生成多个 excel 并打包成 zip下载:由于需要生成的 excel 头字段过多,这里有96个时间段的表头,如果建一个有96个字段的实体不太好,还好 easyExcel ...

  2. java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载

    假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...

  3. python处理多个excel文件-python多个excel文件合并成一个sheet

    运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...

  4. pythonexcel合并多个sheet_python多个excel文件合并成一个sheet

    运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...

  5. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

  6. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...

  7. Java将多个文件打包成ZIP并下载

    Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...

  8. excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...

    Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...

  9. 前端提效 Magic,导出多个Excel文件并打包为压缩包下载

    本篇文章主要介绍使用 exceljs.file-saver.jszip实现下载包含多层级文件夹.多个 excel.每个 excel 支持多个 sheet 的 zip 压缩包. 上一篇文章:前端复杂表格 ...

最新文章

  1. 科研经验2:云协作建立实验室工作总结和内部资料共享平台
  2. WEB学习-CSS盒模型
  3. 【转】pDc-SelectObject(pOldBrush)恢复画刷
  4. tomcat启动卡住
  5. 存储过程里调用另一个存储过程的值
  6. 细说php一些常见的知识点
  7. C语言中常见的内存相关的Bugs
  8. 一)关于java的认识:
  9. Java保存class文件,[转载]Class文件在JVM中如何存储
  10. 磁盘配额超出 linux,Linux磁盘配额应用
  11. 【C语言】字符串、字符数组
  12. CocosCreator 游戏小地图/地图雷达
  13. 物联网已经发展多年,为什么一直不温不火
  14. Hi ! 哈希,Hash
  15. 服务器部署jdk,tomcat环境及腾讯云域名解析
  16. 手工编译java,手工打包, 纯手工制作
  17. 关联规则之购物篮分析
  18. bzoj4774 修路
  19. python中的range()函数
  20. html5 图形组件,数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇

热门文章

  1. java chmod 777_chmod 777 修改权限
  2. Android 一款十分简洁、优雅的日记APP
  3. 基于Java毕业设计安路友汽车租赁源码+系统+mysql+lw文档+部署软件
  4. 超火购车平台易车到底怎么样,为您解答
  5. Socket+MFC的聊天室
  6. Springboot文件上传报错:failed to convert java.lang.String to org.springframework.util.unit.DataSize
  7. 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能
  8. 【滤波专题-第3篇】IIR无限冲激响应和FIR有限冲激响应数字滤波器有什么区别?
  9. 柏林是哪个系统的服务器,柏林系统其实很“佛系”,明白了这些你也能玩好海缸!...
  10. 用函数在Excel中从文本字符串提取数字