为什么SXSSF工作簿(Apache POI)创建比Excel更大的xlsx大小?

时间:2017-12-17 00:02:33

标签: java excel apache-poi sxssf

我开发了一个Java类来使用SXSSF工作簿来克服Java Heap错误,这个错误总是在编写非常大的电子表格时由XSSF工作簿引起的。有关解决方案,请参阅http://poi.apache.org/spreadsheet/how-to.html#sxssf

简而言之,我使用ModelA代替workbook = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE);

这个解决方案就像魔术一样,我现在能够编写非常大的xlsx电子表格,内存占用更少。

但是,我遇到了一个问题。使用SXSSF工作簿时,与Excel本身相比,它实际上会生成更大的xlsx文件大小。例如,33MB由SXSSF创建,而Excel使用相同的数据集创建25MB。为什么呢?

我调查并找到原因:

我将.xlsx扩展名更改为.zip,以便我可以打开它并查看 \ xl \ worksheets \ sheet1.xml 工作表文件。我发现使用workbook = new XSSFWorkbook();的内联字符串由SXSSF生成,而共享字符串表使用t =" s" (v标签)由Excel生成。我检查过XSSF也创建了共享字符串表。有t =" inlineStr"在巨大的电子表格中的每个单元格中,可以更快地炸毁文件大小。

我的问题是,是否可以强制SXSSF工作簿根据共享字符串表生成t="inlineStr"文件(使用v标签 - t =" s")而不是内联字符串(T =" inlineStr&#34)?我希望这个解决方案能够大大减少最终的文件大小。有人知道吗?

0 个答案:

没有答案