0

我这里有点问题,我就是无法完成。

问题是我将 POI 用于 Java 项目,我必须获得 .xls 格式的最终​​输出(Apache 的 HSSF)。

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

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

当 Java 使用 HSSF 工作簿对象写入 Excel 输出文件时,有什么方法可以获取以字节为单位的大小?

4

2 回答 2

0

你最好的选择可能是定期写出文件,看看它有多大。确定文件有多大的唯一方法是将其写出来......

使用 HSSF,并非所有单元都占用相同的大小。字符串单元格与数字单元格占用不同的大小,公式单元格根据其中的运算符和值的数量而有所不同,字符串单元格根据它们是否使用与前一个单元格相同的文本等而有所不同。你可以做一些根据你添加的东西的种类进行粗略的猜测(记住要考虑单元格样式、命名范围、图片等),但唯一可以确定的方法是经常写出来,看看它有多大。

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

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

于 2012-10-10T22:07:13.723 回答
0

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

于 2012-10-11T17:54:33.510 回答