java - poi API 创建的 Excel 文件 : data is there but only one row is viewable?

标签 java excel apache-poi

我使用了网上的简单代码code我能够在 for 循环中调用代码中的方法并向其传递数据和行号。文件已正确创建,文件的大小(刷新文件资源管理器后)在每次插入时都会更改,但是当我完成后,我打开文件,我只能看到其中的第一行,当我关闭它时,文件的大小文件从 1.5MB 减少到 5 字节。我在notepadd++中打开了这个1.5 MB的文件(当然它是用字节字符打开的),我实际上可以看到除了第一行之外我一直在写入文件的数据,我的所有行都在那里。但当我在 Excel 中打开时却没有。

我在这里缺少一些东西吗?每次插入 Excel 文件时,我都会这样做:

fileOutputStream = new FileOutputStream(fileName,true);
sampleWorkbook.write(fileOutputStream);

然后在 try block 的finally block 中:

finally {
    /**
     * Close the fileOutputStream.
    */
    try {
        if (fileOutputStream != null) {
            fileOutputStream.flush();
            fileOutputStream.close();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

但是如果文件大小发生变化并且我可以在记事本中查看数据,为什么 excel 将第一行以外的行视为临时数据(这就是我假设它正在做的事情,因为它恢复到只有 5关闭文件时的字节数)?这里出了什么问题?

提前感谢您的帮助。

赛义德。

最佳答案

这里的问题是 xls 不是一种简单的格式,在 xls 中添加一行并不意味着在文件末尾附加几个字节。新数据被插入到文件的中间,因此您必须完全重写整个文件。 您的代码示例只是在现有工作簿之后写入另一个工作簿,这使得文件内容无效。因此,当您在 Excel 中打开它时,它会自动更正文件内容,删除除第一个工作簿之外的所有添加数据。

使用此代码示例:

InputStream in = new FileInputStream (path);
Workbook sampleWorkbook;
try{
  sampleWorkbook = new HSSFWorkbook (in);//or XSSFWorkbook depending on whether you use xls or xlsx
} finally
{
  in.close ();
}

//Add some rows into the workbook

OutputStream out = new FileOutputStream (path);
try{
  sampleWorkbook.write (out);
} finally
{
  out.close ();
}

关于java - poi API 创建的 Excel 文件 : data is there but only one row is viewable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951428/

相关文章:

java - Webfilter Java RequestDispatcher 在调试器控制台中提供站点内容,而不是重定向到

java - 如何使用 Apache POI 锁定 docx 中图像的长宽比?

java - Apache POI 移行

Java - 在导出期间设置应用程序包版本

java - 检查有多少根是真实的

excel - 从 Access 运行 VBA 以更改 Excelfile

mysql - 如何创建一个数据库来接收来自其他数据库的数据、手动输入和数据导出以创建 Web 仪表板?

VBA:在 Excel 中如何将 Word 文档另存为 PDF?

java - 如何删除 apache POI 单元格中字符串的整行基础

java - Android ListView 内 fragment 不会刷新,无需单击按钮