SpringBoot 动态生成多个Excel文件以压缩包.zip格式下载_springboot 多个excel下载zip-程序员宅基地

技术标签: Excel  Spring Boot  多文件压缩包下载  

前言:

文件下载的场景很多(还不是需求丰富嘛~),那么什么是动态生成文件呢,就是用户选择文件内容,服务器端根据选择的数据生成某个格式的文件然后下载到客户端。单个嘛直接下载,多个打包下载咯!

悄悄说下,Markdown蛮好用哈 =.=

项目场景:

项目中有个数据导出excel的需求,而且是批量,那么就要打包咯

解决步骤:

基本实现如下:
1、生成文件
2、保存到临时目录 || 缓存到内存中
3、将文件打包下载

我不想废话了,上代码:

直接把文件输出流放到压缩流ZipOutputStream

 List<String> fields = new ArrayList<>();
        fields.add("字段1");
        fields.add("字段2");
        fields.add("字段3");
        HSSFWorkbook workbook = excelUtil.getNewExcel("压缩文件测试", fields);
        try {
    
            response.setContentType("application/zip; charset=UTF-8");
            //返回客户端浏览器的版本号、类型
            String agent = request.getHeader("USER-AGENT");
            String downloadName = "压缩文件测试.zip";
            //针对IE或者以IE为内核的浏览器:
            if (agent.contains("MSIE") || agent.contains("Trident")) {
    
                downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
            } else {
    
                downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");
            }
            response.setHeader("Content-disposition", "attachment;filename=" + downloadName);
			
            ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
			//多个从这里就可遍历了
			// --start
            ZipEntry entry = new ZipEntry("第一个文件名.xls");
            zipOutputStream.putNextEntry(entry);

            ByteOutputStream byteOutputStream = new ByteOutputStream();
            workbook.write(byteOutputStream);
            byteOutputStream.writeTo(zipOutputStream);
//            zipOutputStream.write(workbook.getBytes());
            byteOutputStream.close();
            zipOutputStream.closeEntry();
            // --end
            zipOutputStream.close();
        } catch (IOException e) {
    
            e.printStackTrace();
        }

生成excel文件也贴一下,如下:

public static HSSFWorkbook getNewExcel(String formName, List<String> fields) {
    
        //新建excel对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //新建工作表
        HSSFSheet sheet = workbook.createSheet(formName);
        // 设置表格默认列宽度为20个字节
        sheet.setDefaultColumnWidth((short) 20);
        // 生成一个样式
        HSSFCellStyle style = workbook.createCellStyle();
        // 生成一个字体
        HSSFFont font = workbook.createFont();
        font.setFontHeightInPoints((short) 12);
        //字体应用到当前样式
        style.setFont(font);
        //创建表格行
        HSSFRow row = sheet.createRow(0);
        //设置表单名称
        row.createCell(0).setCellValue(formName);
        if (fields.size() - 1 > 0) {
    
            //合并单元格
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, fields.size() - 1));
        }
        HSSFRow row1 = sheet.createRow(sheet.getLastRowNum() + 1);
        //设置列标题行
        for (int i = 0; i < fields.size(); i++) {
    
            row1.createCell(i).setCellValue(fields.get(i));
        }
        return workbook;
    }

就到这里,欢迎留言!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40437152/article/details/111411364

智能推荐

font-face字体图标和inconfont矢量图标库_font-face 图标-程序员宅基地

文章浏览阅读868次。font-face是css3中的一个模块,他主要是把自己定义的web字体嵌入到你的网页中。好处:1.可以非常方便的改变大小和颜色2.放大后不会失真3.减少请求次数和提高加载速度4.简化网页布局5.减少设计师和前端I程师的工作量6.可使用计算机没有提供的字体inconfont矢量图标库 https://www.iconfont.cn下载到本地解压这个告诉如何使用可以拖到浏览器中打开或者双击点开将上面解压到的拷贝到自己需要的位置运行结果彩色图标引入跟上面一样打开选择_font-face 图标

java输出helloWord-程序员宅基地

文章浏览阅读2k次。在 Java 中,可以使用以下代码输出 "Hello, World!":public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }}_java输出helloworld

2 Day DBA-管理Oracle实例-执行常见的数据库存储任务-修改空间使用预警阙值-程序员宅基地

文章浏览阅读124次。当达到表空间空间使用阙值时,会接收到一个预警。 预警有2种类型: n 警告:表空间的可用空间有些低了。 n 严重:表空间几道满了,需要立即采取操作。 ..._预警阙值写什么

两台电脑怎么互传文件?用它就能搞定!_两台主机互相传输文件-程序员宅基地

文章浏览阅读4.2k次。最近公司给小编新配置了一台办公电脑,小编开心的同时,一想到要从旧电脑将所有数据拷贝到新电脑,还得在新电脑上重新安装各种办公软件,就不禁烦恼起来。但俗话说“山重水复疑无路,柳暗花明又一村”,在同事的建议下,小编使用了这款易我电脑迁移软件,不仅可以将旧电脑的文件完整迁移到新电脑,还能将旧电脑上安装的应用程序甚至账户设置也一并迁移,不得不感叹世界真奇妙啊!下面就给大家分享一下小编是如何做到在两台电脑之间互传文件的。首先第一步,下载并安装易我电脑迁移软件,运行程序。点击下载>>官网详情: htt_两台主机互相传输文件

Oracle 11G OCP 1Z0-053 512-程序员宅基地

文章浏览阅读77次。(512)Which two statements correctly describe the relationship among the Scheduler components: job, program, and sc..._ocp 053 512

Hi35xx基础篇1----启动VPSS_hi35xx基础篇 启动vpss-程序员宅基地

文章浏览阅读1.9k次。Hi35xx启动VPSS分为几个步骤:1. /*** 设置 Vpss Grp 属性 ***//*Define attributes of vpss GROUP*/typedef struct hiVPSS_GRP_ATTR_S{ /*statistic attributes*/ HI_U32 u32MaxW; /*MAX width of the group*/..._hi35xx基础篇 启动vpss

随便推点

handler的应用-程序员宅基地

文章浏览阅读93次。package com.example.accessdatabase; import org.xutils.x; import org.xutils.view.annotation.ContentView; import org.xutils.view.annotation.ViewInje..._handler的应用

RAINBOND源码构建JAVA项目配置MAVEN仓库-程序员宅基地

文章浏览阅读116次。概述根据大量的Rainbond用户反馈,我们发现在Rainbond源码构建java-maven项目的过程中,最容易出现问题的一环就是获取构件失败。比如:[ERROR] Failed to execute goal on project bq-insurance-third-party: ..._rainbond maven demo manifest waiting

springboot + vue + iview 3.前后端结合·数据库查询(二)_vue3 显示 数据库 查询 结果-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏7次。数据库1.先在本地创建一个数据库,我起名vue-demo,执行sql如下/* Navicat MySQL Data Transfer Source Server : local Source Server Version : 50720 Source Host : localhost Source Database : v..._vue3 显示 数据库 查询 结果

fengxin_fengxin 风扇-程序员宅基地

文章浏览阅读2.2k次。 联想产品技术学员手册-锋行K 技术支持处 2005-9 目录 1 课程名称………………………………………………………...………_fengxin 风扇

百度2016校园招聘-开发测试工程师-在线编程题1-商队运输费-程序员宅基地

文章浏览阅读1.6k次。/*Problem Description:很久以前,某王国拥有 n 个大城市,为了方便交通,国王下令修建了大量的用于连接首都和其他各大城市高速路。为节省经费,王国采用了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。并且,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。G商队是王国重要的运输商队,他们奔波于各大城市之间,为王国的人们运输商

E - Biorhythms POJ - 1006 (中国剩余定理)_or each test case, print the case number followed -程序员宅基地

文章浏览阅读139次。E - Biorhythms POJ - 1006 (中国剩余定理)Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the physical, emotional, and intelle..._or each test case, print the case number followed by a message indicating th