2014-07-02 7 views
3

Мне нужно разобрать таблицу Excel Excel (приблизительно 20 листов) с помощью листа ColdFusion. cfspreadsheet тег не работает при обработке большого количества данных с помощью [java.lang.OutOfMemoryError: превышен верхний предел GC]. Apache POI User API напрямую ведет себя точно так же:Coldfusion: использование API событий Apache POI

<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?

+0

Вы находитесь на этой странице: http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSe61e35da8d318518-106e125d1353e804331-7ff9.html – barnyr

+0

В настоящее время наши приложения работают в среде CF9, но я буду использовать расширенные Интеграция Java в CF 10-11, поскольку мы планируем перейти на CF11. Теперь я играю с CFX API, чтобы исправить эту проблему. Спасибо –

+1

@SergeyBabrenok - Эта функция в основном является копией [JavaLoader.cfc] Марка Мандела (http://www.compoundtheory.com/?action=javaloader.index), поэтому вы можете сделать то же самое в CF9 или ранее. Я использовал API событий только из java. Возможно, вы можете сделать это с помощью динамического прокси-сервера, как предлагает барнир, но с точки зрения кодирования и производительности я подозреваю, что вам лучше реализовать его в Java. – Leigh

ответ

2

В конце концов мне удалось использовать CF + Apache POI Event API + Mark Mandel's JavaLoader.cfc, спасибо @Leigh, @barnyr за вашу помощь. Я реализовал excel-парсер в java, используя XSSF and SAX Event API, теперь он работает и работает очень быстро. Это было непросто из-за того, что шаблон для синтаксического анализа не был простым и, как было отмечено в комментариях, увеличение размера кучи может быть дешевле.

+0

Не знаете, есть ли у вас код, но это было бы полезно для других, если бы вы разместили несколько фрагментов и/или краткое описание вашего подхода. – Leigh