繁体   English   中英

在Apache POI中写入Excel文件时,如何获取其大小(以字节为单位)?

[英]How to get the size in bytes of an excel file while writing to it in Apache POI?

我在这里有一个问题,我只是无法完成。

事实是,我正在使用POI进行Java项目,并且必须获得.xls格式的最终​​输出(适用于Apache的HSSF)。

因此,我的业务规则规定,我生成的每个文件的最大文件大小必须为12 MB。

但是我知道.xls有一些内部方式来处理数据(我想是XML),所以这不仅将结果放入纯文本文件中,还增加了更多字节。 我只是无法获得Excel工作簿的大小,因为它是在一个临时位置生成的(我找不到它),而且在书写时也无法读取它。

当Java使用HSSF Workbook Object写入Excel输出文件时,是否有任何方法可以获取以字节为单位的大小?

最好的选择是定期将文件写出,然后查看文件的大小。 确切知道文件的大小的唯一方法是将其写出...

使用HSSF,并非所有单元都占用相同数量的大小。 字符串单元格与数字单元格的大小不同,公式单元格取决于运算符和其中的值的数量而有所不同,字符串单元格取决于它们是否使用与上一个单元格相同的文本等。您可以执行一些操作粗略的猜测是基于您要添加的内容的种类(记住要考虑单元格样式,命名范围,图片等),但是唯一可以确定的方法是经常将其写出并查看它的大小。

对于XSSF,它甚至更加复杂。 .xlsx文件格式不仅是XML中的不同单元占用不同数量的字符(与HSSF一样),而且.xlsx文件格式是一种压缩格式。 因此,根据压缩算法的管理方式,编写相同的XML代码段可以在输出文件中占用可变数量的空间。 (例如,第一个将比后续的更多)。 因此,无需进行保存和测试就可以更加确定。 同样,您可能会提出一些粗略的猜测,但是唯一可以确保的方法就是保存并查看。

如果您想要一个可预测的文件大小,则必须使用纯粹基于文本的内容,例如.CSV文件。

好吧,在对API进行了一些研究之后,我发现名为getBytes()的方法返回工作簿上每个数据(表,行,数据等)的字节数组,因此使用长度将返回非常接近的字节数组。用户使用的最终工作簿生成的字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM