Apache POI从3.17升级至4.1.2后导出空Excel问题求助
Apache POI 3.17升级至4.1.2后导出Excel为空的排查方案
- 检查工作表创建与激活逻辑:3.17版本默认创建的工作表会自动激活,但4.1.2里得显式调用
sheet.setActive(true),或者用workbook.setActiveSheet(index)指定正确的工作表索引,不然导出的文件可能因为没有激活工作表,打开后显示为空。 - 验证单元格写入的API兼容性:虽然大部分API兼容,但部分隐式写入逻辑有变化。比如写入单元格时,得确保调用
row.createCell(colIndex)并设置值,不能只创建行却不创建单元格;另外排查下是不是用了标记为过时的API(比如某些setCellValue重载),这类API在新版本里可能失效。 - 排查输出流的关闭顺序:一定要先调用
workbook.write(outputStream)写入内容,再关闭工作簿和输出流,顺序搞反会导致内容没完全写入。4.1.2对资源释放的校验更严格,没正确关闭会造成文件损坏或为空。 - 检查样式或单元格格式异常:如果设置了错误的单元格样式(比如字体颜色和背景色一致、单元格被隐藏),视觉上就会显示为空。可以先导出无样式的简单表格,验证是不是样式的问题。
- 验证XML导出相关配置:既然是因为XXE漏洞升级,检查
XSSFExportToXml的配置是不是开了过于严格的XML过滤规则,导致导出时没正确写入数据;可以临时简化导出配置,只导出基础数据,排查是不是XML处理逻辑的问题。
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

