【发布时间】:2019-07-23 05:00:25
【问题描述】:
我正在尝试使用 Apache POI 编辑包含数据的 excel 文件。 我写了以下代码:
FileInputStream fileInputStream = new FileInputStream(new File("file.xlsx"));
Workbook workbook = WorkbookFactory.create(fileInputStream);
Sheet sheet = workbook.getSheet("sheet");
Row row = sheet.getRow(1);
Cell cell = (row.getCell(1) == null) ? row.createCell(1) : row.getCell(1);
cell.setCellType(CellType.STRING);
cell.setCellValue("something here");.
fileInputStream.close();
try(FileOutputStream fileOut = new FileOutputStream("file.xlsx")) {
workbook.write(fileOut);
workbook.close();
}
当我运行代码时,当我尝试打开 Excel 文件时收到以下错误:“我们发现 'file.xlsx' 中的某些内容存在问题。您是否希望我们尽可能多地恢复可以吗?如果您信任此工作簿的来源,请单击“是”。”
如果我点击是,Excel 会使用我指定的值进行更新;但是,我不希望出现此错误。我该如何解决这个问题?
【问题讨论】:
-
您的代码在
file.xlsx中唯一更改的是单元格sheet!B2的字符串内容。如果这导致文件损坏,则单元格sheet!B2必须是其他内容的一部分。也许它是ExcelTable的标题?或者在数据透视表的某个地方?要么...?我们需要在代码更改之前知道工作表sheet包含什么,才能回答这个问题。 -
我有一个类似的问题,我可以在关闭之前通过另外
flushingFileOutputStream来解决这个问题。我目前不将try与资源一起使用,也许这会有所作为。尝试在workbook.close()之前添加fileOut.flush()。 -
@AxelRichter 工作表包含一个常规字符串。它不包含任何表格或其他对象。我尝试在不同的行/表/单元格上运行代码。结果相同。
-
@deHaar 我停止使用 try with resources 并添加了 fileOut.flush()。我仍然面临同样的问题。
-
要么继续将
try与资源一起使用,要么明确关闭FileOutputStream之后flush()和workbook.close()之前。这就是我成功运行它的方式。
标签: java excel apache apache-poi