Springboot 导出Excel文件方式对比与注意事项

Springboot 导出Excel文件方式对比与注意事项

  • Excel导出系列目录:
  • 为什么不导出.xls后缀的文件?
    • EasyExcel导出xls后缀文件
    • POI导出xls后缀文件
  • POI导出与EasyExcel导出相比哪种方式最优呢?
  • POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?
    • 服务过滤器踩坑
    • XSSFClientAnchor参数配置踩坑
    • HSSFClientAnchor参数配置踩坑
    • 导出文件使用不同软件打开有差别

Excel导出系列目录:

【Springboot 使用EasyExcel导出Excel文件】
【Springboot 使用POI导出Excel文件】
【Springboot 导出Excel文件方式对比与注意事项】

前两篇中,我们使用EasyExcel、POI两种常用的方式实现Excel的导出功能,并且最后我留了三个问题,这次讲解一下:

  1. 为什么不导出.xls后缀的文件?
  2. POI导出与EasyExcel导出相比哪种方式最优呢?
  3. POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?

为什么不导出.xls后缀的文件?

这个一般没有强制,不管是在工作中,一般不会强制让你生成的Excel文件后缀。不同软件对xls后缀的文件兼容性好。如果需要导出.xls后缀的文件,那就见以下代码,修改一下。

根据不同软件的兼容情况,想共同兼容Office与WPS的话,导出后缀xls的文件即可。

EasyExcel导出xls后缀文件

以【Springboot 使用EasyExcel导出Excel文件】文章为例

将导出的文件名修改为.xls后缀即可。

POI导出xls后缀文件

以【Springboot 使用POI导出Excel文件】文章为例

  1. 将导出的文件名修改为.xls后缀
  2. XSSF前缀的类,修改为HSSF前缀。
  3. 插入图片使用的XSSFDrawing类,修改为HSSFPatriarch
  4. 插入图片时使用的XSSFClientAnchorHSSFClientAnchor中的参数有极大的区别,需要特殊注意,具体见下文描述。

POI导出与EasyExcel导出相比哪种方式最优呢?

情况代码实现扩展性
EasyExcel简单易扩展
POI复杂不易扩展

我感觉如果导出的全是文字或者对导出内容样式没有极高的要求,可以优先选EasyExcel导出,否则,选择POI导出

POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?

  1. 因为服务中的前置过滤器处理,导致响应的二进制流下载后无法正常打开文件
  2. 上文中,POI导出时插入图片使用的XSSFClientAnchorHSSFClientAnchor类一定要注意他们的参数差异
  3. 经比对,POI导出的后缀为xlsx后缀有内边距的图片,在Office中打开没问题,但是在WPS打开时右侧与下侧的边距会消失样式有差距

服务过滤器踩坑

为了能在调用服务接口的时候打印出响应体内容,大家一般会继承HttpServletRequestWrapper类,将响应内容取出并打印,但是这个会对响应内容做处理并输出,如果是返回二进制流数据,就会出现问题,我当前的处理方式是如果请求url属于导出接口,那就不使用继承HttpServletRequestWrapper的类接收响应

XSSFClientAnchor参数配置踩坑

用于在xlsx后缀文件中插入图片并可以在单元格中定位图片位置。
如果想实现文章中的图片所在单元格有内边距效果,代码如下:

// row=行号(从0开始),col=列号(从0开始)
XSSFClientAnchor anchor = new XSSFClientAnchor(100000, 100000, -100000, -100000, (short) col, row, (short) col + 1, row + 1);

HSSFClientAnchor参数配置踩坑

用于在xls后缀文件中插入图片并可以在单元格中定位图片位置。
如果想实现文章中的图片所在单元格有内边距效果,代码如下:

// row=行号(从0开始),col=列号(从0开始)
HSSFClientAnchor anchor = new HSSFClientAnchor(100, 25, 900, 240, (short) col, row, (short) col, row);

导出文件使用不同软件打开有差别

目前发现只有POI导出的xlsx后缀的文件会出现这种问题,发现这种问题的解决方案如下:

  1. 导出excel中的图片不设置内边距,直接覆盖整个单元格
  2. 导出xls后缀的excel文件,就可以让Office与WPS同时兼容样式

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南京林业大学生态学博士在1区top期刊揭示人工林发育促进土壤团聚体的形成与稳定:对土壤碳氮固存的启示

本文首发于“生态学者”微信公众号! 文章信息 第一作者:石珂 通讯作者:阮宏华教授 通讯单位:南京林业大学 原文链接:https://doi.org/10.1016/j.catena.2024.108363 亮点 •土壤团聚体的稳定性随着林分发育而增…

【BASH 常用脚本系列 4 -- 在 shell 脚本执行的时候打印出所调用命令所在的路径】

文章目录 概述使用 type使用 which使用 command -v示例解析概述 在 Shell 脚本执行时,如果你想打印出脚本所调用命令的完整路径,可以利用 type、which 或 command -v 等命令来实现。这些命令用于查找命令的路径或验证命令是否存在于系统中。下面是一些方法的详细介绍和示例:…

接口测试(五)jmeter——get请求

一、get请求——短信验证码(示例仅供参考) 1. get请求:传参数据直接拼接在地址后面,jmeter不需要设置请求头content-type 注:短信验证码接口,返回结果中不会返回短信验证码,是存在数据库表中&a…

java中常见集合,非常重要!!!

Java 集合框架提供了一组用于存储和操作对象的类和接口,主要包括 List、Set 和 Map。下面是对 Java 集合的主要类型和它们的特点的介绍。 集合的主要接口 Collection:集合的根接口,表示一组对象。 List:有序集合,允许…

【C++初阶】一文讲通C++内存管理

文章目录 1. C/C内存分布2. C语言中动态内存管理方式3. C内存管理方式3. 1 new/delete操作内置类型3. 2 new和delete操作自定义类型 4. new与delete的原理4. 1 operator new与operator delete函数4. 2 内置类型4. 3 自定义类型 5. 定位new表达式(placement-new)6. malloc/free和…

校园资讯平台|校园资讯平台系统|基于java和小程序的校园资讯平台设计与实现(源码+数据库+文档)

校园资讯平台 目录 基于java和小程序的校园资讯平台设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#xff0c…

【mysql进阶】4-7. 通用表空间

通⽤表空间 - General Tablespace 1 通⽤表空间的作⽤和特性? ✅ 解答问题 通⽤表空间是使⽤ CREATE tablespace 语法创建的共享InnoDB表空间 通⽤表空间能够存储多个表的数据,与系统表空间类似也是共享表空间; 服务器运⾏时会把表空间元数…

【mysql进阶】4-6. InnoDB 磁盘文件

InnoDB 磁盘⽂件 1 InnoDB存储引擎包含哪些磁盘⽂件? 🔍 分析过程 ✅ 解答问题 InnoDB的磁盘⽂件主要是表空间⽂件和其他⽂件,表空间包括:系统表空间、独⽴表空间、通⽤表空间、临时表空间和撤销表空间;其他⽂件有重做…

vue3.0 + vite打包完成后,将dist下的资源包打包成zip的两种方法

vue3.0 vite打包完成之后,自动将dist下的资源包打包成zip 1、vite-plugin-zip-pack 插件 安装插件 npm i -D vite-plugin-zip-pack修改vite.config.ts,增加plugin // vite.config.ts import { defineConfig } from "vite"; import zipPack,…

springboot入门学习笔记

在我们创建了一个Springboot项目之后,我们会看到有很多文件夹和文件 Springboot程序中各类文件的意义 一.pom.xml 在 Spring Boot 项目中,pom.xml(Project Object Model)文件是 Maven 构建工具的核心配置文件。起到项目信息定义…

OpenCV中的图像通道合并

在计算机视觉和图像处理领域,OpenCV是一个强大的工具库,它提供了从基本操作到复杂算法的广泛功能。今天,我们将通过一个简单的示例来探索OpenCV中的图像通道处理,特别是如何操作和理解BGR与RGB颜色空间的差异。 Lena图像&#xf…

四,Linux基础环境搭建(CentOS7)- 安装Zookeeper

Linux基础环境搭建(CentOS7)-安装Zookeeper 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Zookeeper下载及安装 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的…

51单片机记录

电平特性 (本课程中)定义单片机为TTL电平 高5V 低 0V RS232电平:计算机串口 高-12V 低12V ※掌握二进制转16进制 二进制数的逻辑运算 “与”运算是实现“必须都有,否则就没有”运算符“”—“&”有0则0 例:000;01100;111 规律…

解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南

目录 前言1. 分析问题原因2. 解决方案2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码3.2.1 Windows 系统3.2.2 Linux 和 mac…

2024mathorcup大数据竞赛B题【电商品类货量预测及品类分仓规划】思路详解

问题 1:建立货量预测模型,对该仓储网络 350 个品类未来 3 个月(7-9月)每个月的库存量及销量进行预测,其中库存量根据历史每月数据预测月均库存量即可,填写表 1 的预测结果并放在正文中,并将完整…

强化学习数学原理学习(一)

前言 总之开始学! 正文 先从一些concept开始吧,有一个脉络比较好 state 首先是就是状态和状态空间,显而易见,不多说了 action 同理,动作和动作空间 state transition 状态转换,不多说 policy 策略,不多说 reward 奖励,不多说 MDP(马尔科夫) 这里需要注意到就是这个是无…

了解 - 微格式

微格式 微格式(microformat)是一种用于在 HTML 中嵌入语义和结构化数据的标准,它为社交网络应用程序、搜索引擎、聚合器和其他工具提供了一个 API。这些最小的 HTML 模式用于标记从基本到特定领域的信息实体,例如人物、组织、事件…

Java-图书管理系统

我的个人主页 欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧! 1管理端和用户端 2建立相关的三个包(book、operation、user) 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…

Redis 集群 问题

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 集群 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 集群 & 总结》(学习总结/最新最准/持续更新)《Redis & 集群…

MySQL 安装及用户管理

MySQL 安装及用户管理 MySQL 是一款广泛使用的开源关系数据库管理系统,适用于各种应用程序和平台。本文将提供在不同操作系统(Windows、macOS 和 Linux)上安装 MySQL 的详细步骤,并介绍如何创建 MySQL 用户及设置密码。 1. Wind…