使用Java中的Apache POI创建Excel (.xlsx)文件后,文件损坏了。

10

我已经成功使用Apache POI API在Java中创建了一个.xlsx格式的工作簿/Excel。我的代码如下,它创建了一个名为“RiponAlWasim.xlsx”的文件在D驱动器中:

Workbook wb = new XSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("D:\\RiponAlWasim.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();

当我尝试打开“RiponAlWasim.xlsx”时,显示文件已损坏。出了什么问题?


1
close()之前尝试使用fileOut.flush()。此外,您可能需要向工作簿添加至少一个工作表,并且在写入之前应关闭工作簿。 - lance-java
如果在写入内容之前关闭了工作簿,那么内容会被如何保存?这可能会抛出“NullPointerException(空指针异常)”。 - Ripon Al Wasim
谢谢<Lance Java>。是的,最重要的是 - 至少需要创建一个工作表到工作簿中。创建了一个工作表后它就可以工作了。 - Ripon Al Wasim
4个回答

12

至少需要向工作簿添加一个工作表。因此,在创建工作表之后,以下代码可以正常工作:

Workbook wb = new XSSFWorkbook();
Sheet sheet1 = wb.createSheet("Ripon");
FileOutputStream fileOut = new FileOutputStream("D:\\RiponAlWasim.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();

添加行Sheet sheet1 = wb.createSheet("Ripon");解决了我面临的问题。 - Ripon Al Wasim
1
我们需要先刷新fileOut,然后才能关闭流。 - Lova Chittumuri
节省了我数小时的头痛,我完全忘记关闭流;仅关闭工作簿是不够的! - Dario Coletto

0

我曾遇到类似的问题,在我的情况下,我发现我使用了两次写入操作。所以如果你遇到这样的错误,一个原因可能是有多个相同流的写入操作。


0

Excel文件损坏的原因:由于循环语句内部出现错误而导致Excel关闭不当

在循环中使用try-catch块,以便在catch块中:

  • 关闭工作簿变量
  • 关闭文件输出流变量
  • 关闭文件输入流变量

循环结束后:

  • 使用关闭文件输出流变量来写入工作簿
  • 关闭工作簿变量
  • 关闭文件输出流变量
  • 关闭文件输入流变量

-1

我添加了最新版本的xalan(xalan 2.7.1)


由于您当前的回答表述不清楚,请[编辑]以添加更多细节,从而帮助其他人了解这如何回答所提出的问题。您可以在帮助中心找到有关撰写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接