4

我正在尝试编写一个代码,将数据附加到现有的 Excel 电子表格中。但是,当我运行此代码时,文件已损坏。

在此代码的情况下,我正在尝试添加电子表格,但我已尝试使用现有工作表中的单元格,但没有出现任何相同的错误。我错过了什么吗,看起来我正在创建一个 Excel 添加一些数据然后写入,关闭它。然后只需将新工作表添加到现有工作簿并将其再次写入流。

public class PlayWithExcel {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    Workbook wb = new XSSFWorkbook();
    XSSFSheet ws = (XSSFSheet) wb.createSheet("Initial Data");
    XSSFSheet ws1 = (XSSFSheet) wb.createSheet("Cross Referenced");
    XSSFSheet ws2 = (XSSFSheet) wb.createSheet("HPD");

    Row row = ws.createRow(0);
    row.createCell(0).setCellValue("Value");
    row = ws1.createRow(2);
    row.createCell(3).setCellValue("Address");

    try {
        String path = "C:/Users/Jenny/Desktop/Test.xlsx";
        FileOutputStream out = new FileOutputStream(path);
        wb.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }


    XSSFSheet ws3 = (XSSFSheet) wb.createSheet("another sheet");


    try {
        String path = "C:/Users/Jenny/Desktop/Test.xlsx";
        FileOutputStream out = new FileOutputStream(path);
        wb.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

4

1 回答 1

3

许多人在尝试多次写作时都会遇到这个问题。这是 POI 中的一个已知问题

但是,我建议您在第一次写入时尝试使用 fileinputstream 重新加载文件,并且您需要重新加载访问该文件。

try {
    String path = "C:/Users/Jenny/Desktop/Test.xlsx";
    FileOutputStream out = new FileOutputStream(path);
    wb.write(out);
    out.close();
    wb = new XSSFWorkbook(new FileInputStream(path));
} catch (Exception e) {
    e.printStackTrace();
}
于 2013-09-09T11:32:02.947 回答