You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Apache POI生成的.xlsb文件无法打开求助

在Spring Boot中使用Apache POI生成有效.xlsb文件的解决方案

问题分析

生成的.xlsb文件无法被Excel打开,提示格式或扩展名无效,核心原因通常是生成的文件实际格式与扩展名不匹配,或者Workbook实例未正确配置为XLSB类型。

解决步骤

1. 确保依赖正确

使用Apache POI处理.xlsb需要依赖poi-ooxml,推荐使用5.x及以上稳定版本,对XLSB支持更完善:

<!-- Maven依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

2. 创建XLSB类型的Workbook

必须显式将Workbook的文档类型设置为XLSB,否则默认生成的是XLSX格式文件,即使扩展名是.xlsb也无法被Excel识别:

// 创建XLSB格式的Workbook实例
XSSFWorkbook workbook = new XSSFWorkbook();
// 关键:设置文档类型为XLSB
workbook.setDocumentType(XSSFWorkbookType.XLSB);

// 示例:添加工作表和数据
XSSFSheet sheet = workbook.createSheet("使用报表");
XSSFRow headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("日期");
headerRow.createCell(1).setCellValue("使用量");

// 填充数据行
XSSFRow dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("2021-07-01");
dataRow.createCell(1).setCellValue(100);

3. 正确写入并关闭文件

使用try-with-resources语法自动管理流资源,避免因流未正确关闭导致文件损坏:

String fileName = fromDate.replace("-", "").substring(0, 6) + "-usagereportb.xlsb";
String filePath = "D:\\java\\rating-report\\usage_report_v1\\" + fileName;

try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
    workbook.write(outputStream);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        workbook.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

常见错误排查

  • 未设置XLSB文档类型:这是最常见的原因,默认XSSFWorkbook生成的是XLSX格式,必须通过setDocumentType(XSSFWorkbookType.XLSB)切换为二进制格式。
  • 依赖版本过低:旧版本POI对XLSB的支持存在bug,升级到5.x版本可解决大部分兼容性问题。
  • 流未正确关闭:手动关闭流时如果出现异常,可能导致文件写入不完整,使用try-with-resources可避免此问题。

内容的提问来源于stack exchange,提问作者Akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:14:53