0

我必须编写一个非常大的 XLS 文件,我尝试过 Apache POI,但它占用了太多内存供我使用。

我快速浏览了 StackOverflow,发现了一些对 Cocoon 项目的引用,特别是 HSSFSerializer。似乎这是一种将 XLS 文件写入磁盘的内存效率更高的方法(根据我的阅读,如果我错了,请纠正我!)。

我对这里描述的用例感兴趣:http: //cocoon.apache.org/2.1/userdocs/xls-serializer.html。我已经编写了代码来以格式写出文件Gnumeric,但我似乎无法找到如何调用将HSSFSerializer其转换为 XLS。

进一步阅读,Cocoon 项目似乎是一种网络框架。我很可能会叫错树,但是:

您能否提供一个读取文件、在其HSSFSerializer上运行并将该输出写入另一个文件的示例?从文档中不清楚如何做到这一点。

4

2 回答 2

0

我不知道您所说的“XLS”是指在 Office 2007 之前的特定版本的这种“可怕的电子表格格式”(这是 HSSF 的意思),还是您可以使用最新版本的 MS Office 打开的任何内容, 开发办公室, ...

因此,根据您的客户要求(即那些将打开您的 Excel 文件的要求),可能还有另一个选项可用:生成.XLSX文件。

它归结为以适当的语法生成 XML 文件,这似乎适合您的情况,因为您似乎已经使用基于 XML 的 Gnumeric 文件格式完成了该操作,没有技术问题,也没有遇到内存效率问题。

请注意 Excel 和其他客户端可以使用的其他基于 XML 的电子表格格式。您可能想深入研究打开的文档文件格式。


至于是否使用 Apache Cocoon 或其他东西:

  • Cocoon 可以肯定地承载 XSL 处理;如果您需要 Cocoon,可以使用批处理(Cocoon CLI)处理,但要求它不要作为 web 应用程序运行(尽管据我所知,CLI 功能在 2.1 系列的最新版本中被破坏);并且 Cocoon 带有大量可以满足更多需求的特性和技术。
  • 如果只是归结为运行 XSL 转换,Cocoon 可能有点矫枉过正,您可以从中选择一堆众所周知的更轻量级的工具。
于 2012-10-12T10:32:26.303 回答
0

我的朋友,HSSF 序列化器是 POI 的一部分。您只是在要序列化的 xml 中设置某些属性(但您需要一个完整的过程来创建它)。此外,使用此框架设置整个管道来创建 XLS 似乎很奇怪,因为它会更改应用程序的架构。¿ 这是你的决定吗?

从文档:

生成电子表格的另一种方法是通过 Cocoon 序列化程序(但您仍将间接使用 HSSF)。使用 Cocoon,您可以通过简单地应用样式表并指定序列化程序来序列化任何 XML 数据源(例如,可能是用 SQL 输出的 ESQL 页面)。

如果内存有问题,请在 POI 中尝试 XSSF 或 SXSSF。

于 2012-07-10T18:06:59.990 回答