【问题标题】:appending to an existing excel file using XSSFWorkbook使用 XSSFWorkbook 附加到现有的 excel 文件
【发布时间】:2013-09-09 10:53:59
【问题描述】:

我正在尝试编写将数据附加到现有 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();
    }
}

}

【问题讨论】:

    标签: java excel io apache-poi


    【解决方案1】:

    许多人在尝试多次写作时都会遇到这个问题。兴趣点中的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();
    }
    

    【讨论】:

    • 如果你有一个文件,你最好直接从它打开而不是通过 InputStream,见the POI documentation for details of why
    • Sankumarsingh,非常感谢!!!它真的奏效了!但我似乎不明白我刚才所做的事情的逻辑。 InputStream 如何帮助我,它用于读取文件。如果你能解释一下会很有帮助。
    • @Leah-DinaCharnetskaya:最初您创建了一个新工作簿,因此无需加载任何输入流,但是当您编写了任何 Excel 工作簿时,如果再次想处理该工作簿,那么您需要再次加载。顺便说一句,使用输入/输出文件流有点慢并且消耗内存。如果你使用文件会更好。
    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2012-06-27
    • 2014-05-09
    • 2010-12-20
    • 2019-07-23
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多