使用Java生成的.xlsx文件无法用MS Excel打开,提示格式/扩展名无效
问题原因分析
你遇到的问题根源其实很清晰:HSSFWorkbook是Apache POI专门用来处理旧版Excel格式(.xls,对应Excel 97-2003版本)的类,它生成的文件内容本质是.xls格式,但你给文件命名成了.xlsx扩展名。MS Excel会通过扩展名判断文件格式,当实际内容和扩展名不匹配时,就会弹出“格式或扩展名无效”的错误提示。
两种解决方案
方案一:生成标准
.xlsx格式文件
如果你确实需要生成.xlsx格式(适配Excel 2007及以后版本),请替换为XSSFWorkbook类(这是POI中对应OOXML格式的实现),修正后的代码如下:XSSFWorkbook workBook = new XSSFWorkbook(); String file = "D:/sample.xlsx"; FileOutputStream fos = new FileOutputStream(file); workBook.write(fos); fos.flush(); fos.close(); // 建议加上流关闭操作,避免资源占用泄漏注意:使用
XSSFWorkbook需要确保你的项目依赖中包含poi-ooxml相关的jar包(如果用Maven/Gradle管理依赖,要引入对应的依赖项)。方案二:保持
.xls格式
如果你不需要.xlsx格式,只是文件名写错了,直接把文件名的扩展名改成.xls即可:HSSFWorkbook workBook = new HSSFWorkbook(); String file = "D:/sample.xls"; // 修正扩展名 FileOutputStream fos = new FileOutputStream(file); workBook.write(fos); fos.flush(); fos.close();
内容的提问来源于stack exchange,提问作者Suresh
相关产品推荐
相关产品推荐

