当前位置: 首页 > ai >正文

【Java】批量生成Excel放入文件夹并打zip压缩包

本文展示了Java批量生成并下载Excel报表为ZIP文件的技术实现。

先看一下生成文件的效果示例:

直接上代码:

public void reportDownBatch(HttpServletResponse response) {// 设置响应的内容类型和头信息response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=\"" + "report" + "\"");// 获取输出流InputStream input = null;try (OutputStream outputStream = response.getOutputStream();ZipOutputStream zos = new ZipOutputStream(outputStream);) {String fileName;ZipEntry zipEntry;ZipEntry fileEntry;// 这里以月份作为示例,改为实际获取文件夹名称的方法List<String> list = Arrays.asList("2025-01", "2025-02", "2025-03");for (String month : list) {// 创建ZIP中的文件夹,改为实际文件夹名fileName = month + "/";zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);zos.closeEntry();// 生成文件,改为实际的查询参数及方法input = exportFile(month);// 目录里层文件名(文件夹名+文件名),改为实际文件名fileEntry = new ZipEntry(fileName + month + "-28.xlsx");zos.putNextEntry(fileEntry);byte[] buffer = new byte[1024];int len;while ((len = input.read(buffer)) > 0) {zos.write(buffer, 0, len);}zos.closeEntry();input.close();}} catch (IOException e) {log.error(e.getMessage());e.printStackTrace();} finally {try {if (input != null) {input.close();}} catch (IOException e) {log.error("关闭输入流出错", e);}}}public InputStream exportFile(String month) {// 1.初始化FillConfig fillConfig = FillConfig.builder().build();ByteArrayOutputStream os = new ByteArrayOutputStream();// 2.获取表格模板,下面有模板示例(替换为真实的模板路径)InputStream inputStream = getClass().getResourceAsStream("/static/excelTemplate.xlsx");ExcelWriter excelWriter = EasyExcel.write().withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).file(os).build();// 3.获取模板第一个sheet页WriteSheet sheet = EasyExcel.writerSheet(0).build();// 4.填充表头参数(不需要的话可以直接删除)Map<String, Object> titleMap = new HashMap<>();titleMap.put("title", "标题");excelWriter.fill(titleMap, sheet);// 5.填充列表数据(替换为实际查询数据的方法)List<Report> reportList = mapper.getListByMonth(month);excelWriter.fill(new FillWrapper("reportList", reportList), fillConfig, sheet);// 如有其他sheet页重复步骤3-5// 6.结束填充excelWriter.finish();InputStream stream = new ByteArrayInputStream(os.toByteArray());return stream;}

excel模板示例:

注意参数名称和代码中一致。 

http://www.xdnf.cn/news/16550.html

相关文章:

  • 八种AI记忆术,重构智能体的“大脑”
  • RFID 系统行业前沿洞察:技术跃迁与生态重构
  • 线性代数常见的解题方法
  • aws(学习笔记第五十课) ECS集中练习(2)
  • 【MySQL 数据库】MySQL索引特性(二)页目录(B和B+树)(非)聚簇索引 索引操作
  • APM32芯得 EP.27 | 告别IDE,为APM32F411打造轻量级命令行开发工作流
  • 《Computational principles and challenges in single-cell data integration》
  • Vite 模块动态导入之Glob导入
  • 微算法科技MLGO突破性的监督量子分类器:纠缠辅助训练算法为量子机器学习开辟新天地
  • PCB学习笔记(一)
  • LeetCode 面试经典 150_数组/字符串_轮转数组(6_189_C++_中等)(额外数组;转置)
  • dify + mcp 实现图片 ocr 识别
  • 实例教学FPN原理与PANet,Pytorch逐行精讲实现
  • [leetcode] Z字型变换
  • dify离线插件打包步骤
  • 手撕设计模式——智能家居之外观模式
  • C++线程详解
  • C++11 std::function 详解:通用多态函数包装器
  • 从0开始学习R语言--Day62--RE插补
  • 【ssh】ubuntu服务器+本地windows主机,使用密钥对进行ssh链接
  • Linux常用基础命令
  • 反射核心:invoke与setAccessible方法详解
  • Git 从入门到精通
  • linux命令ps的实际应用
  • SQL注入SQLi-LABS 靶场less26-30详细通关攻略
  • 深入解析Java元注解与运行时处理
  • ​第七篇:Python数据库编程与ORM实践
  • 前缀和-974.和可被k整除的子数组-力扣(LeetCode)
  • [mcp: JSON-RPC 2.0 规范]
  • 机器学习之线性回归——小白教学