Java导出多个excel压缩成zip下载

Java导出多个excel压缩成zip下载

  • maven
		<!--hutoos工具类根据需要可以导入不同的模块,我这里是导入全部的模块-->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.8.8</version>
		</dependency>
		<!--poi对excel2007以上版本的支持-->
		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>
  • 代码

    @SneakyThrows
    @GetMapping("downloads1")
    public void downloads1(HttpServletResponse response){
        // 压缩包名称
        String zipFileName = "student.zip";
        ServletOutputStream servletOutputStream = response.getOutputStream();
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(servletOutputStream)) {

            for (int i = 0; i < 2; i++) {
                Map<String, Object> row1 = new LinkedHashMap<>();
                row1.put("姓名", "张三");
                row1.put("年龄", 23);
                row1.put("成绩", 88.32);
                row1.put("是否合格", true);
                row1.put("考试日期", DateUtil.date());

                Map<String, Object> row2 = new LinkedHashMap<>();
                row2.put("姓名", "李四");
                row2.put("年龄", 33);
                row2.put("成绩", 59.50);
                row2.put("是否合格", false);
                row2.put("考试日期", DateUtil.date());

                ArrayList<Map<String, Object>> rows = CollUtil.newArrayList(row1, row2);

                // 通过工具类创建writer
                ExcelWriter writer = ExcelUtil.getWriter();
                // 合并单元格后的标题行,使用默认标题样式
                writer.merge(row1.size() - 1, "一班成绩单" + i);
                // 写表格数据
                writer.write(rows);

                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                // 把Excel刷入输出流
                writer.flush(byteArrayOutputStream);
                // 设置ZipEntry名称(这里等于excel名称)
                zipOutputStream.putNextEntry(new ZipEntry("ExcelName" + i + ".xls"));
                // 将输入流转换成压缩ZipEntry
                zipOutputStream.write(byteArrayOutputStream.toByteArray());
                zipOutputStream.flush();
                // 关闭writer,释放内存
                writer.close();
                zipOutputStream.closeEntry();
            }
            //response为HttpServletResponse对象
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
            response.setHeader("Content-Disposition", "attachment;filename=test.xls");

            response.setContentType("text/html; charset=UTF-8");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(zipFileName, "UTF-8"))));
        }
        servletOutputStream.close();
    }
  • 效果图
    在这里插入图片描述
  • 文件内容
    在这里插入图片描述
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值