使用EasyExcel(FastExcel) 的模板填充报Create workbook failure

该文章已生成可运行项目,

场景

使用 EasyExcel (FastExcel) 做数据导出时,用了通过模板导出数据的形式。
在读取模板文件的时候出现错误导致创建Workbook 失败,
错误日志:

Create workbook failure...
No valid entries or contents found, this is not a valid OOXML (Office Open XML) file

错误原因

//templatePath 模板路径 resources 目录下的路径包括模板文件名(如 template/xxx.xlsx)
ClassPathResource templateResource = new ClassPathResource(templatePath);

这里读取到的文件路径其实不是我们原始文件的路径而是JAVA编译之后的target/classes下的路径,我们通过String absolutePath = templateResource.getAbsolutePath();就能得到路径地址。
这就是 Create workbook failure的原因之一。

如何解决
pom.xml里面添加 plugin

	<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<nonFilteredFileExtensions>
						<nonFilteredFileExtension>xls</nonFilteredFileExtension>
						<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
					</nonFilteredFileExtensions>
				</configuration>
			</plugin>

希望对你有帮助。
这个解决办法其实在github - easyExcel的Issues 有一位仁兄提出。本人亲测后确实可行。遂记录一下。

本文章已经生成可运行项目
### EasyExcel 模板填充时空值导致错误的解决方案 在使用 EasyExcel 进行模板填充操作时,如果遇到因空值而导致的错误,可以通过以下方法来解决: #### 方法一:调整实体类中的字段映射关系 当模板中存在某些列为空的情况时,需确保实体类中的字段与 Excel 表头通过 `@ExcelProperty` 注解正确匹配。若某列无实际意义或可能为空,则可以移除该字段对应的注解或将其实现设置为可选处理[^3]。 ```java @Data public class DemoData { @ExcelProperty("姓名") // 确保此名称与模板表头一致 private String name; @ExcelProperty("年龄") private Integer age; // 如果某一列为可选项,可通过判断逻辑跳过验证 } ``` #### 方法二:预设默认值防止空指针异常 对于可能出现 null 的情况,在写入前先对数据进行初始化处理,避免后续计算过程中抛出 NullPointerException 异常。可以在 Bean 中重载 setter 方法实现自动赋初值功能[^1]。 ```java private String address; public void setAddress(String address){ this.address = (address != null && !"".equals(address.trim())) ? address : "未知地址"; } ``` #### 方法三:自定义样式适配器保持原有格式不变 针对部分场景下由于覆盖原单元格内容而丢失边框等问题,建议采用 StyleStrategy 自定义策略方式保留原始外观特性[^2]。 ```java WriteCellStyle headWriteCellStyle = new WriteCellStyle(); headWriteCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 设置水平居中 HorizontalAlignment horizontalAlignment = HorizontalAlignment.CENTER; WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); contentWriteCellStyle.setHorizontalAlignment(horizontalAlignment); // 构建策略对象并绑定至writer实例上 AbstractXlsxTemplateFillConfig fillConfig=new AbstractXlsxTemplateFillConfig(){}; fillConfig.setHeadWriteCellStyle(headWriteCellStyle); fillConfig.setContentWriteCellStyle(contentWriteCellStyle); EasyExcel.write(fileOutputStream,DemoData.class).registerWriteHandler(fillConfig).sheet().doFill(dataList); ``` 以上三种途径能够有效应对由空白项引发的一系列连锁反应,从而保障程序稳定运行的同时也提升了用户体验度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值