Java Apache POI: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

我正在写一个方法,它可以写入Excel文件。在调用之前,我创建了一个工作簿和一个工作表。代码执行时没有任何错误,但是当打开创建的Excel文件时,我得到一条消息:我们发现了中的某些内容有问题

我的方法如下所示:

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文件中看到更改。另外,请确保您正在查看正确的文件。