【Java中导出Excel导出多个sheet页】

Java中导出Excel导出多个sheet页

  • 序言
  • 如何处理多个sheet页的导出
  • 期间遇到了一个sheet页相关的问题,以及解决办法
    • 多sheet页导出遇到,第二个sheet页的标题名称会把第一个的覆盖的问题
  • 结语

序言

在日常工作中经常有导出数据文件的需求,避免不了会有导出多个sheet页的功能,这里给大家分享一个自己使用过的方法。

如何处理多个sheet页的导出

下面是导出的方法代码,用到的参数基本就是两个对应的数据集合,两个数据的标题(这个根据自己需求来,可以不用),excel文件名称,以及两个sheet页的名称。
// 这里是导出多个sheet页的方法代码
	/**
		* 导出多个sheet页
		* @param response
		* @param list 第一个sheet页数据集合
		* @param list1 第二个sheet页数据集合
		* @param title 第一个的标题
		* @param title1 第二个的标题
		* @param fileName excel文件名称
		* @param sheetName 第一个sheet页名
		* @param sheetName1 第二个sheet页名
	*/
	public static void exportExcelPlus1(HttpServletResponse response,List<?> list,List<?> list1,String title,String title1,String fileName,String sheetName,String sheetName1){
        if (CollUtil.isEmpty(list)) {
            throw new SystemNoLogException(ResponseCode.EXCEL_EXPORT_FAILED, "无数据可导出");
        }
        Class<?> clazz = list.get(0).getClass();
        Class<?> clazz1 = list1.get(0).getClass();
        if (StrUtil.isEmpty(fileName)) {
            fileName = "Excel导出";
        }
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            String fileSuffix = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date());
            fileName = fileName.concat("_").concat(fileSuffix);
            String excelName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
            Field[] fields = clazz.getDeclaredFields();
            List<Field> fieldList = Arrays.stream(fields).filter(item -> item.getAnnotation(ExcelProperty.class) != null).collect(Collectors.toList());
            int cellCount = fieldList.size();

            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).excelType(ExcelTypeEnum.XLSX).build();

            WriteSheet mainSheet = EasyExcel.writerSheet(0, sheetName).head(clazz)
                    .registerWriteHandler(new ExportExcelTitleWriteHandler(cellCount, title,0))
                    .registerWriteHandler(new ExportExcelHeadWriteHandler(1))
                    .registerWriteHandler(new HorizontalCellStyleStrategy(defaultHeadStyle(), defaultContentCellStyle()))
                    .sheetName(sheetName)
                    //默认样式
                    .useDefaultStyle(true)
                    //写入头信息的开始行数
                    .relativeHeadRowIndex(1)
                    .build();


            excelWriter.write(list,mainSheet);
            Field[] fields1 = clazz1.getDeclaredFields();
            List<Field> fieldList1 = Arrays.stream(fields1).filter(item -> item.getAnnotation(ExcelProperty.class) != null).collect(Collectors.toList());
            int cellCount1 = fieldList1.size();
            WriteSheet dSheet = EasyExcel.writerSheet(1, sheetName1).head(clazz1)
                    .registerWriteHandler(new ExportExcelTitleWriteHandler(cellCount1, title1,1))
                    .registerWriteHandler(new ExportExcelHeadWriteHandler(1))
                    .registerWriteHandler(new HorizontalCellStyleStrategy(defaultHeadStyle(), defaultContentCellStyle()))
                    .sheetName(sheetName1)
                    //默认样式
                    .useDefaultStyle(true)
                    //写入头信息的开始行数
                    .relativeHeadRowIndex(1)
                    .build();

            excelWriter.write(list1,dSheet);
            excelWriter.finish();

        } catch (Exception e) {
            log.error("export excel error", e);
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");

            try {
                String message = "下载文件失败" + e.getMessage();
                RestResponse restResponse = RestResponse.build(ResponseCode.EXCEL_EXPORT_FAILED, message);
                response.getWriter().println(JSON.toJSONString(restResponse));
            } catch (IOException ioException) {
                log.error("export excel error", ioException);
                throw new SystemNoLogException(ResponseCode.EXCEL_EXPORT_FAILED, ioException.getMessage());
            }
        }
    }

期间遇到了一个sheet页相关的问题,以及解决办法

多sheet页导出遇到,第二个sheet页的标题名称会把第一个的覆盖的问题

 导出数据之后发现,第二个的标题名称覆盖了第一个的标题,去网上找到了对应的解决办法,就是给标题赋值的时候,后面加上对应的sheet页索引,这样就能指定每一个sheet页对应的标题名称,下图中红色框中最后的索引就对应了各自的sheet页,索引从0开始,大家可以根据自己需求更改。

多sheet页相关问题

结语

不是职业博主,只是记录自己用到的一些技术点或者问题相关的解决办法,以便于以后用到的时候查看,顺便分享,如果有无法解决问题可以留言,看到会及时回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748310.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pcdn技术如何实现智能调度和负载均衡,以平衡网络负载和延迟?

PCDN技术实现智能调度和负载均衡&#xff0c;以平衡网络负载和延迟的操作&#xff0c;主要依赖于其主动调度、动态优化和负载均衡的工作原理&#xff0c;其二主要依赖于其在CDN的边缘节点上部署代理服务器的方式。以下是其实现过程&#xff1a;以下是具体的实现步骤&#xff1a…

【面试干货】final、finalize 和 finally 的区别

【面试干货】final、finalize 和 finally 的区别 1、final1.1 修饰类1.2 修饰方法1.3 修饰变量 2、finally3、finalize4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程语言中&#xff0c;final、finalize和finally都是关键…

【Unity】Timeline的倒播和修改速度(无需协程)

unity timeline倒播 一、核心: 通过playableDirector.playableGraph.GetRootPlayable(i).SetSpeed(speed)接口,设置PlayableDirector的速度。 二、playableGraph报空 若playableDirector不勾选Play On Awake,则默认没有PlayableGraph,需执行playableDirector…RebuildGr…

基于STM32的简易智能家居设计

一、项目功能概述 1、OLED显示温湿度、空气质量&#xff0c;并可以设置报警阈值 2、设置4个继电器开关&#xff0c;分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统&#xff0c;可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

仓颉编程语言全攻略:学习秘籍+内测资格申请秘籍!

仓颉官网简介 仓颉编程语言是一款面向全场景智能的新一代编程语言&#xff0c;主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态&#xff0c;为开发者提供良好的编程体验。 官网直达&#xff1a;https://developer.huawei.com/consumer/cn/cangjie/ 华为开发者官网…

分文件编译

分文件编译 为什么分文件编译 防止主文件过大&#xff0c;不好修改&#xff0c;简化编译流程 编译 分文件编译代码需要将多个.c文件联合编译 功能函数格式.c #include "函数名.h" 函数 头文件格式.h #ifndef __文件名大写_H__ #define __文件名大写_H__ 功能函数…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域&#xff0c;传统的 HTTP 协议存在以下一些问题&#xff1a; 频繁的请求和响应&#xff1a;每次通信都需要建立和关闭连接&#xff0c;带来额外的开销。高延迟&#xff1a;每次通信都需要经过多个网络层的传输&#xff0c;延…

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导您使用Spring Annotator实现Spring控制器&#xff0c;标准Java类被添加到搭建项目中&#xff0c;Spring Annotator Spring启用Java类。 虽然本教程的重点是Spring控制器&#xff0c;但是Spring Annotator也可以用于Spring服务、组件和存储库。在本教程中&#xff…

吴恩达机器学习作业ex5:正则化线性回归和偏差VS方差(Python实现)详细注释

文章目录 1.正则化线性回归1.1 可视化数据集1.2 正则化线性回归成本函数1.3 正则化线性回归梯度1.4 拟合线性回归 2 偏差-方差2.1 学习曲线 3.多项式回归3.1 学习多项式回归3.2 正则化参数的调整3.3 使用交叉验证集选择 λ3.4 计算测试集误差 1.正则化线性回归 在练习的前半部…

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中&#xff0c;眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中&#xff0c;JQuery EasyUI 如一位指路明灯&#xff0c;为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI&#xff1f; JQuery EasyUI&#xff0c;简单来…

Xilinx FPGA:vivado实现串口的接收端

补充一些串口里用到的数值的相关知识点 接收端串口时序图&#xff1a; 程序设计&#xff1a; timescale 1ns / 1ps /串口接收端 串行转并行 module uart_rx(input sys_clk ,input rst_n ,input rx_data , //输入…

导出excel带图片

文章目录 前言一、根据图片路径转为图片总结 前言 列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种 如何处理图片就是重点 一、根据图片路径转为图片 废话不多说,直接上代码 书接上文: 通用导出 // 多个sheetfor (Sheet sheet : writer.getSheets()) {// 循环每一条数据…

构建网络图 (JavaScript)

前序&#xff1a;在工作中难免有一些千奇百怪的需求&#xff0c;如果你遇到构建网络图&#xff0c;或者学习应对未来&#xff0c;请看这边文章&#xff0c;本文以代码为主。 网络图是数据可视化中实用而有效的工具&#xff0c;特别适用于说明复杂系统内的关系和连接。这些图表…

等保1.0与2.0:物理环境安全的演进之路

在信息安全的大厦中&#xff0c;物理环境安全是那坚实的基础&#xff0c;承载着整个信息系统的稳定与安全。随着时间的推移&#xff0c;我国的信息安全等级保护标准也在不断地进化与完善&#xff0c;从等保1.0到等保2.0&#xff0c;不仅仅是数字上的递增&#xff0c;更是对物理…

【黑龙江哪些行业需要做等保?】

黑龙江等保测评是衡量企业网络安全水平的一项主要指标&#xff0c;包括&#xff1a;金融&#xff0c;能源&#xff0c;电信&#xff0c;医疗&#xff0c;教育&#xff0c;交通&#xff0c;制造&#xff0c;电商等。 等保测评是黑龙江省信息化建设的重要组成部分&#xff0c;也…

Qt篇——获取Windows系统上插入的串口设备的物理序号

先右键【此电脑-管理- 设备管理器-端口&#xff08;COM和LPT&#xff09;】中找到我们插入的某个设备的物理序号&#xff0c;如下图红色矩形框出的信息&#xff0c;这个就是已插入设备的物理序号&#xff08;就是插在哪个USB口的意思&#xff09;。 在Linux下我们可以通过往/et…

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

螺栓常用的防松方法

螺栓防松原理可以分为三种:摩擦防松、机械防松和永久防松。摩擦防松与机械防松为可拆卸防松&#xff0c;而永久防松为不可拆卸防松。 永久防松平常接触较少&#xff0c;这里只简单介绍一下常用的永久防松方法有:点焊、铆接、粘合等。这些方法在拆卸时大多要破坏螺纹紧固件&…

SAP ERP公有云(全称 SAP S/4HANA Cloud Public Edition),赋能企业成为智能可持续的企业

在数字化浪潮中&#xff0c;每一家企业都需要应对快速的市场变化&#xff0c;不断追求降本增效&#xff0c;为创新提供资源&#xff0c;发展新的业务模式&#xff0c;安全无忧地完成关键任务系统的转型。 10年前&#xff0c;SAP进入云领域&#xff0c;用云ERP和覆盖全线业务的云…