Как отобразить большое количество строк (порядка 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.
Используйте приведенный ниже код, чтобы установить ограничение на 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.