Java Apache POI:excel文件中的内容已损坏
我正在写一个方法,它可以写入Excel文件。在调用之前,我创建了一个工作簿和一个工作表。代码执行时没有任何错误,但是当打开创建的Excel文件时,我得到一条消息:我们发现了中的某些内容有问题 我的方法如下所示:Java Apache POI:excel文件中的内容已损坏,java,excel,apache-poi,Java,Excel,Apache Poi,我正在写一个方法,它可以写入Excel文件。在调用之前,我创建了一个工作簿和一个工作表。代码执行时没有任何错误,但是当打开创建的Excel文件时,我得到一条消息:我们发现了中的某些内容有问题 我的方法如下所示: public void writeToCell(int rowNumber, int cellNumber, Double content) { Row row = sheet.createRow(rowNumber); Cell cell = row.createCel
public void writeToCell(int rowNumber, int cellNumber, Double content) {
Row row = sheet.createRow(rowNumber);
Cell cell = row.createCell(cellNumber);
cell.setCellValue(content);
try (FileOutputStream outputStream = new FileOutputStream(month + ".xlsx", true)) {
workbook.write(outputStream);
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
下面是我如何调用该方法的:
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(month);
writeToCell(25, 4, 0.0);
writeToCell(25, 6, 23.32);
您不应该显式地将数据附加到Excel工作簿中,Excel工作簿在其注释中也以@Axel为指向
try (FileOutputStream outputStream = new FileOutputStream(month + ".xlsx", true))
反而
try (FileOutputStream outputStream = new FileOutputStream(month + ".xlsx"))
作为旁注
writeToCell(25, 4, 0.0);
writeToCell(25, 6, 23.32);
writeToCell
的最后一次调用将覆盖相同第25行的上一个值。在每次调用中创建新的行
Row row = sheet.createRow(rowNumber);
是否关闭
输出流
?是,在调用该方法后。我也尝试在方法中关闭它,但没有帮助。您是否可以在调用writeToCell的位置添加代码?是否有使用25和4的具体原因?或25和6?不能使用具有布尔append true的FileOutputStream将数据追加到Excel工作簿。方法workbook.write(outputStream)代码>总是将整个工作簿写入流。因此,您要做的是向流中写入两个完整的工作簿。您需要创建工作簿,创建工作表,创建所有包含数据的单元格,然后使用workbook.write(outputStream)一次性写入工作簿代码>。看,谢谢你的回答。有没有一种方法可以让我通过Apache POI库将内容附加到excel文件?@Stijn它会在每次调用中附加数据,但您需要确保您不会再次创建同一行,否则它会覆盖上一行OK我明白您的意思了。我尝试将一个单元格写入第25行,另一个写入第26行,但问题仍然存在。我的代码中还会有错误吗?@Stijn你确定你删除了附加标志吗?并调用类似的writeToCell(24,0,4.0);写单元(25,5,23.32)代码>?@Stijn我使用的是您的精确代码和我在帖子中建议的更改,我能够在excel文件中看到更改。另外,请确保您正在查看正确的文件。