Как отобразить большое количество строк (порядка 50 КБ) в отчетах BIRT Excel?

Я использую BIRT 4.8.0 в Java-проекте для генерации отчетов Excel. Отчет Excel содержит 1 тыс. Столбцов и может содержать от 10 до 50 тыс. Строк (результат 1 запроса, сопоставление с 1 таблицей). Я использую spudsoft ExcelEmitter для рендеринга статических отчетов Excel.

Источник данных: соединение Impala jdbc, используя 1 набор данных с 1 запросом

Проблема в том, что требуется 6-7 ГБ пространства кучи (java) только для рендеринга 10k строк в этом отчете, чтобы загрузить все в память и затем записать его в файл.

Есть ли способ уменьшить объемы памяти (предсказуемое использование пространства кучи, предпочтительно до 3 ГБ) при отображении листов Excel (такие параметры, как разбиение на страницы результатов запроса, рендеринг файла по частям и т. Д.)?

0 ответов

Я решил это с новой версией spudsoft emitter. Это изменяет apache poi с xssf на sxssf:

ExcelEmitter.ExtractMode Экспериментальная функция! При значении true эмиттер должен работать быстрее для файлов XLSX, но с ограниченным набором функций:

  • Изображения будут опущены.
  • Объединенные ячейки не допускаются.
  • Верхний и нижний колонтитулы структуры не поддерживаются. См. ExcelEmitter.StructuredHeader.

https://www.eclipse.org/forums/index.php/m/1804253/

Используйте приведенный ниже код, чтобы установить ограничение на 15 КБ. Это решило мою проблему.

reportContext.getAppContext().put("MAX_PAGE_BREAK_INTERVAL", 15000);

Я смог сгенерировать Excel для большого набора данных (порядка 50 тыс. Строк и 1 тыс. Столбцов), напрямую используя API потоковой передачи Apache POI. Aspose APIs - еще один хороший инструмент для этого.

Используя потоковые API POI, вы можете визуализировать Excel с порядком 50 тыс. Строк, 1 тыс. Столбцов примерно за одну или две минуты при пиковой загрузке 2 ГБ.

Таким образом, если вы расширяете Spudsoft Excel Emitter для использования потоковых API POI, то он может быть обработан и с помощью BIRT.

Другие вопросы по тегам