使用XSSFWorkbook附加到现有的excel文件

时间:2013-09-09 10:53:59

标签: java excel io apache-poi

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

在这个代码的情况下,我试图添加一个电子表格,但我尝试使用现有工作表中的单元格,没有luch和所有相同的错误。我错过了什么,看起来我正在创建一个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();
    }
}

}

1 个答案:

答案 0 :(得分:1)

许多人在尝试不止一次写作时都面临着这个问题。 POI中This is a known issue

但是我建议您在第一次写入时尝试使用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();
}