gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:54:36 24 4
gpt4 key购买 nike

我使用了网上的简单代码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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com