【问题标题】:Coldfusion: using Apache POI event APIColdfusion:使用 Apache POI 事件 API
【发布时间】:2015-05-18 23:37:49
【问题描述】:

我需要使用 ColdFusion 逐页解析大型 Excel 电子表格(大约 20 张)。 cfspreadsheet 标签在处理大量数据时失败,[java.lang.OutOfMemoryError: GC 开销限制超出]。 Apache POI User API 直接行为相同:

<cfscript>
  pkg = CreateObject("java", "org.apache.poi.openxml4j.opc.OPCPackage").open(JavaCast("string", fileName));
  // error on next line
  wb = CreateObject("java", "org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(pkg);
</cfscript>

我尝试使用 Apache POI event API 而不是用户 API,但遇到了 java 继承问题。有没有人使用过XSSF and SAX (Event API) 在 ColdFusion 中处理大型电子表格?

【问题讨论】:

  • 目前我们的应用程序运行在 CF9 环境下,但我会考虑 CF 10-11 中增强的 Java 集成,因为我们计划迁移到 CF11。现在我正在使用 CFX API 来解决这个问题。谢谢
  • @SergeyBabrenok - 该功能基本上是对 Mark Mandel 的JavaLoader.cfc 的翻版,因此您可以在 CF9 或更早版本中执行相同的操作。我只使用了来自 java 的事件 API。您可能可以使用 barnyr 建议的动态代理来实现,但从编码和性能的角度来看,我怀疑您最好在 java 中实现它。
  • 我想另一个问题是,你能增加分配给 ColdFusion JVM 的堆吗?这样做可能比几乎任何开发人员的努力都便宜。即使你不能在生产中这样做,我也会在开发中这样做,只是为了排除任何无限循环或其他问题
  • @barnyr,是的,增加堆大小可以解决问题,但我正在寻找内存效率更高的解决方案。谢谢,Leigh,我将使用 JavaLoader.cfc 审查该方法

标签: excel apache coldfusion cfspreadsheet


【解决方案1】:

毕竟我成功使用了 CF + Apache POI Event API + Mark Mandel's JavaLoader.cfc,谢谢@Leigh,@barnyr 的所有帮助。我使用XSSF and SAX Event API在java中实现了excel解析器,现在它可以工作并且工作得非常快。这并不容易,因为要解析的模板并不简单,并且正如 cmets 中所表示的那样,增加堆大小可能会更便宜。

【讨论】:

  • 不知道您是否还有代码,但如果您发布一些 sn-ps 和/或您的方法的简要概述,将会对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2016-11-17
  • 2011-09-26
  • 2015-11-23
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多