EasyExcel 学习之 导出 “WPS 表格在试图打开文件时遇到错误”

1. 版本

版本
org.springframework.boot:spring-boot-starter-parent2.0.8.RELEASE
com.alibaba:easyexcel4.0.0

特别注意:不同的 Springboot 版本可能现象不同,2.7.14 就是可以的。

2. 现象

EasyExcel # Issue

本人在使用 EasyExcel 导出 xls 文件后,通过 WPS 打开文件,呈现两种情况:

2.1. Postman 文件下载成功且 WPS 可以正常打开

在这里插入图片描述

一般情况下导出下载只能通过 GET 方法触发,但是实际中前端可以通过一些代码逻辑模拟 GET 下载,即上图所示 POST 下载。

2.2. VUE 下载成功但 WPS 无法打开

在这里插入图片描述

3. 原因:前端未指定 responseType

Axios 中,responseType 是一个非常重要的配置项,它用于告诉 Axios 你期望从服务器接收到的响应数据类型。

常见的 responseType 值及其用途:

适用场景备注
json默认)用于解析JSON数据
blob下载文件,二进制数据因为 Blob 对象可以被用来创建一个指向该文件内容的 URL,进而触发浏览器的下载行为或者在页面上展示文件内容
arraybuffer图片、音频、视频等二进制文件
documentXML文档
text纯文本数据
stream流数据

4. 常见问题

4.1. NoSuchMethodError

4.1.1. org.apache.logging.log4j.LogBuilder org.apache.logging.log4j.Logger.atTrace()
4.1.2. Could not initialize class org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.21.1</version>
	<scope>compile</scope>
</dependency>

EasyExcel是一个Java库,用于读写Excel文件,但它本身并不直接支持在导出文件设置背景水印。然而,你可以通过一些第三方库如Apache POI或者JExcelApi,它们提供了更底层的对Excel文件操作的功能,包括插入图片作为水印。 以下是使用Apache POI实现Excel文件背景水印的基本步骤: 1. 首先,你需要引入Apache POI的XSSF依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> </dependency> ``` 2. 创建一个工作簿并获取活跃的单元格: ```java Workbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Sheet1"); XSSFDrawing drawing = sheet.createDrawingPatriarch(); ``` 3. 创建一个图像(水印)并插入到工作表中: ```java Image watermarkImage = ImageIO.read(new File("watermark.png")); // 水印图片路径 ClientAnchor anchor = new ClientAnchor(0, 0, 0, 0, 0, 0, 500, 500); // 设置位置,这里举例为左上角起始,宽度和高度为500像素 DrawingCell dwgCell = drawing.createCell(anchor); XSSFShape watermarkedShape = dwgCell.addPicture(watermarkImage, DrawingShapeType.PICTURE); ``` 4. 将水印应用到整个工作表: ```java for (Row row : sheet) { for (Cell cell : row) { cell.getSheet().adddrawing(dwgCell); } } ``` 5. 最后保存工作簿: ```java try (OutputStream outputStream = new FileOutputStream("output.xlsx")) { workbook.write(outputStream); } ``` 请注意,这个过程可能会覆盖原始数据,所以建议在处理前备份数据。另外,EasyExcel本身是基于流式API设计的,如果你需要在EasyExcel的数据映射阶段就实现这样的效果,可能需要自定义数据处理器或者将EasyExcel的数据转换到Apache POI的模型后再做修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值