powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
36 сообщений из 36, показаны все 2 страниц
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769485
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги.

тулз. Java Swing + JDBC + Apache POI.

Предыстория:
Делал как-то формирование Excel через poi со слиянием ячеек с одинаковыми значениями в колонках + подсчет подытогов по определенным колонкам. Данные из БД. Однажды у клиента вылезло исключение java heap spase.... В итоге подсказали что память (не стековая) засерается и нужно использовать потоковоые методы формирования Excel.

Проблема:
Начал делать как сказали, формировал Excel через Stream`инг. Но после наполнения таблицы я не могу пройтись заново по ней (чтобы вычислить что слиять, где втавить строку подитогов и т.п.), потому что часть данных уже на диске.

Вот например Oracle BI у него отчет после выполнения отрисовывается в браузере и экспортируется в Excel как мне надо. И я знаю что BI на Java. Тут конечно закрадывается мысль о том, что на серваке то памяти по более будет и поэтому там не было таких исключений.

Кто что думает на эту тему? Как не просто сформировать большой Excel, но и преобразовать его в более понятный (для бухгалтерии) вид?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769486
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVто что думает на эту тему? Как не просто сформировать большой Excel, но и преобразовать его в более понятный (для бухгалтерии) вид
Думаю, что создавать простую плоскую таблицу несложно любым инструментом, а преобразовывать в какую-то вычурную форму нужно самим Excel-ем.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769488
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лысый дядька,
+1
У меня юзверь сам делал шаблон и форматировал одну строку с шапкой, а я просто копировал ее на нужное количество)
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769538
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Поточный метод формирования Excel файла не подразумевает возможности "вернуться" к началу файла, что бы что-то там исправить. Движение потока только в одну сторону. Все необходимые промежуточные результаты, надо высчитывать самостоятельно, результаты записывать в нужные ячейки по мере их "появления" в потоке, для форматирования использовать заранее подготовленные (в начале потока) стили. Пример: The simple helper for create Microsoft Excel workbook via Apache POI
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769544
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV.....Тут конечно закрадывается мысль о том, что на серваке то памяти по более будет и поэтому там не было таких исключений.
....
Дочитав до этого места, закрадывается мысль, что окно с браузером можно закрывать.

1. Памяти-то сколько Java машине выделено? Увеличивать не пробывали?
2. Профилировшиком посмотреть, что находится в памяти не пробывали? Возможно у Вас какой нибудь resource leak происходит.
etc....

У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит ( C )
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769554
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Ну без язвительных комментариев в стиле "у кого пис...н больше" считай день в пустую!

автор1. Памяти-то сколько Java машине выделено? Увеличивать не пробывали?
Побывал! Но если бы вы внимательно прочитали, но поняли что мое решение остановилось на использовании поточного формирования, где соответственно проблемы с памятью отлетают.

автор2. Профилировшиком посмотреть, что находится в памяти не пробывали? Возможно у Вас какой нибудь resource leak происходит.
etc....
Этим я занялся сразу как начал получать исключения. И то что память начала засераться именно в либах POI, мне как бы мало помогло. А после, я полез гуглить, где сразу же наткнулся на посылы использовать поточные методы, т.к. они появились, а раньше их не было.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769572
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПобывал! Но если бы вы внимательно прочитали, но поняли что мое решение остановилось на использовании поточного формирования, где соответственно проблемы с памятью отлетают.
Зато вы создали новый топик с новой проблемой.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769574
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,
Теперь можно вернуться к старому методу и еще методам X, Y, Z.
В первом разобраться с памятью. Сколько нужно и можно ли увеличить.
Ну и другие советы отработать.
В том числе использование готовых отчетных серверов по взрослому.
Скрин сложного отчета дайте.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769630
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Ну со скрином проблемы, точнее могут быть. Начальство увидит по бошке даст.
Могу сказать что файл получается приблизительно 35 колонок, а строк когда как, 1 000 - 50 000.
Клиенты на которых выполняются отчеты разные, где-то 1 гиг, где то 4 гига оперативы.
Параметры VM: -Xms512m -Xmx4096m. Но это мало поможет, если у клиента 1-2 гига, а отчет большой.

Я думал может через XML уже сделать (xslt), но как то не перфекционно пользователю давать xml.

Я просто не понимаю, че они так не продумали. У меня самописный ДатаСет может хранить это все в памяти, а POI нет.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769635
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объединение ячеек в POI происходит через метод:
Код: java
1.
sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);


Вот у меня 5 000 строк. В первой колонке 2 500 ячеек имеют одно и тоже значение, и остальные 2 500 другое и тоже значение.
т.е.
Код: java
1.
sheet.addMergedRegion(1,2499,1,1);


и
Код: java
1.
sheet.addMergedRegion(2500,5000,1,1);
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769646
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVНачальство увидит по бошке даст.это отмаз?
В гугле поиске нет похожего? Докторская? Нобелевская?
..
Почему не сделать шаблоном как я выше писал?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769659
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Я хочу сделать некий визард. Сейчас у меня так:
1. Программист определяет отчет как выгрузка Excel.
2. Заходит в некий визард, сует туда SQL, нажимает кнопку "Проверить"
3. JDBC достает метаданные и отображает их на JTable
4. Пользователь может указать в JTable заголовок поля, тип, ширину, суммировать или нет, и если да, то по каким группам колонок.
5. Сохраняет.

Далее конечный пользователь запускает отчет с параметрами и получает Excel.
Из вышесказанного вы должны понять, что эти отчеты не типовые, скорее аналитические. В них нет преамбул и проч. дополнений. Обычная выгрузка, но с подытогами и объеденеными ячейками.
Это должно быть так, потому, что - это просто с точки зрения использования как для разработчика отчета, так и для бухгалтера.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769663
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Jasper Report не пробовали?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769664
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, наверное, будет правильнее https://community.jaspersoft.com
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769665
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Garrick,

Уже =)
Но вот хочу выгрузкой SQL -> Excel
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769668
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Отчет japserReport можно сразу сохранять в Excel.
А так, ODBC + VBA + Excel java-не нужно ;-)
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVЭто должно быть так, потому, что - это просто с точки зрения использования как для разработчика отчета, так и для бухгалтера.

я же сказал как еще проще. Вы ноль реакции.
Юзверь шаблон правит в экселе а не в jTable.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769682
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Хорошо, неправильно выразился: - привычнее.
А вообще я не понимаю причем тут шаблон? Шаблон делает разметку, а разметка у меня простая, она сама генерится в виде обычных столбцов. В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769683
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul,

Да дело не в том чтобы сразу в Excel, даже пускай предпросмотр будет. Просто отчет в Jaspere нужно все равно рисовать. А тут вариант простой выгрузки с некоторыми атрибутами.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769693
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVPetro123,
В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?
Ну так а формулы в экселе нафига придуманы? Это если про макросы молчать.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769713
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лысый дядькаAndronovMVPetro123,
В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?
Ну так а формулы в экселе нафига придуманы? Это если про макросы молчать.
+1
Аффтар, ты первый раз эксель видишь?
Юзверь пишет формула СУММ в ячейку ИТОГО.
Ты при копировании автоматом формулу проставляешь по колонке.
Итоги сдвигаются вниз красным и жирным.
В коде ячейка.цвет = red нигде не пишем.
Программиста юзверь не зовет.
Дизайнер jTable не делаем.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVЯ хочу сделать некий визарднет.
Лучше так:
Я хочу собственноручный, наколенный, велосипедный генератор отчетов.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769721
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVПросто отчет в Jaspere нужно все равно рисовать. А тут вариант простой выгрузки с некоторыми атрибутами.не понял.
Выше скрины ведь все окошки рукописные?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769759
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

1. У вас есть реализация, хотя бы простейшая своего решения?
2. Про велосипеды и проч. субъективное мнение можно разговаривать, если есть однозначное и самое простое решение, а не всего лишь 1 из возможных.
3. Окошки и дизайн отчета разные вещи. То где отображается результат отчета JasperReports это рукописная система, но шаблон отчета сделан в JasperStudio, где кстати похожий "наколенный велосипед" под название "редактор SQL". В рукописной системе пользователь лишь указывает параметры выполнения отчета.

В нашей системе, если нужен типовой отчет типа УПД, он рисуется в Jaspere и регится в системе, а если нужны сводные данные или аналитика, то выгрузка в Excel.

Вообще я так и знал, что тема начнет плавно утекать в сторону альтернативных решений и фраз типа не "изобретай велосипед", т.к. отвечающим тяжело понять многих аспектов, в том числе область применения, и даже такие вещи как есть бухгалтер, тётя Мотя и вот ей надо именно так, именно здесь, даже если это уже объективно сложнее делать. А также, что есть определенный стек и прикручивать лишнее никому не захочется и даже мне.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769769
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVУ вас есть реализация, хотя бы простейшая своего решения?
Решение чего?
Скопировать всю строку #2 с получением строки #3 и вторую заполнить ячейки?
2. Хотя бы с jasper решением сравни нормально. У тебя скрин простейшего отчета.
3. Ты выше сам ушел от решения ошибки по памяти в сторону стримов. Разве нет?
А мы типо не имеем право?
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769775
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень понятно, в чем же смысл вопроса и в чем проблема

1) Первым делом я бы сделал простейший Test case и попытался бы оценить "прожорливость" POI XSSF и HSSF.

Тогда можно было бы "начальству", прямо сказать: а что Вы хотите, документ офигенно большой, нужно N Gb памяти, а у пользователей только M.

note: как я понимаю, XSSF для хранения в памяти использует XML DOM, т.ч. прожорливость объяснима
для HSSF в I-net'е есть рекомендации по reusing'у java объектов, что должно экономить память

2) Формировать документ в один проход через стриминг Но тут мы не видем кода программы. Зачем при формирование документа нужно "пройтись заново" совершенно не понятно.

Кроме того, остается технический вопрос. Т.к. я подозреваю, что для merge cell, все равно все ячейки которые собираемся merge нужно будет держать в "windows" (rows in memory). Если merge cell может быть на весь документ, то тогда тоже получим те же "яйца (куриные) но вид сбоку".

Test case нет, примера кода нет, что обсуждать, не очень понятно.

Лично я, например, Excel файл (XML) формирую на Oracle Forms вообще командами TEXT_IO.put_line() :-)
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769780
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 страниц спустя и пару месяцев - автор напишет либо jasper, либо yarg.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769781
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVсо слиянием ячеек с одинаковыми значениями в колонках
....я не могу пройтись заново по ней (чтобы вычислить что слиять....

Например с помощью Oracle или PostgreSQL аналитики, вполне можно кол-во повторяющихся "одинаковые значения в колонках" посчитать на уровне SQL-запроса, без хранения данных в ОП.

с групиировками и подитогами - тем более, второй проход даром не требуется
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769796
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

автор2) Формировать документ в один проход через стриминг Но тут мы не видем кода программы. Зачем при формирование документа нужно "пройтись заново" совершенно не понятно.
Имелось ввиду что начало массива уже нет, т.к. он отправился на жд, а метод
Код: java
1.
sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);


предполагает наличие строк указанных в аргументах.

авторTest case нет, примера кода нет, что обсуждать, не очень понятно.
Вопрос был обобщенный, т.с. на идею, а не на разрешение тех. проблем.

авторНапример с помощью Oracle или PostgreSQL аналитики, вполне можно кол-во повторяющихся "одинаковые значения в колонках" посчитать на уровне SQL-запроса, без хранения данных в ОП.
Попытаюсь объяснить. В нашей компании есть программисты (разработчики), а есть что-то типа функциональных спецов, который знают SQL на примитивном уровне, знаю предметную область хорошо и не знаю программирование в целом. Так вот их задача написать SQL запрос, зарегать и настроить его в системе как выгрузка EXCEL. Никакие подсчеты или прочие технические вопросы они реализовывать через SQL не будут.

авторЛично я, например, Excel файл (XML) формирую на Oracle Forms вообще командами TEXT_IO.put_line() :-)
Да вот я тоже думаю как бы не пришлось через StringBuilder xml-ник строить и под видом xls его преподносить.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769797
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123AndronovMVУ вас есть реализация, хотя бы простейшая своего решения?
2. Хотя бы с jasper решением сравни нормально. У тебя скрин простейшего отчета.

Не понял

Petro123А мы типо не имеем право?
Дело не в этом
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769798
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Petro123Решение чего?
Скопировать всю строку #2 с получением строки #3 и вторую заполнить ячейки?

Если не сложно прикрепи xls шаблон как ты это видишь.
А лучше код обработки этого файла.
Простейший, на одну-две колонки.
Просто для понимания тебя в целом.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769800
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV....
Так вот их задача написать SQL запрос, зарегать и настроить его в системе как выгрузка EXCEL. Никакие подсчеты или прочие технические вопросы они реализовывать через SQL не будут.

Например Oracle поддерживает под-запросы (и есть даже фраза WITH и материализацию)

Т.ч. "обернуть" запрос в свой с нужной аналитикой, не проблема.

про другие базы не знаю

AndronovMV....
Имелось ввиду что начало массива уже нет, т.к. он отправился на жд, а метод
Код: java
1.
sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);


предполагает наличие строк указанных в аргументах.
...

я об этом предполагал (((
ну что можно сказать - печалька. Если merge может быть большой, то большая печалька.

AndronovMVxml-ник строить и под видом xls его преподносить

Ну на мой взгляд, это не плохо.
XML spreadsheet - __стандартный__ и документированный формат для Excel-2007

IMHO & AFAIK
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769814
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVPetro123Хотя бы с jasper решением сравни нормально. У тебя скрин простейшего отчета.

Не понял
Если jasper, то в чем проблема?
В нем sql вогнал и группировки свойствами и подотчетами как обычно.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769835
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMVЕсли не сложно прикрепи xls шаблон как ты это видишь.вижу так:

https://habr.com/ru/post/422059/
Правда каюсь, что посмотрев POI я понял что он не умеет копировать строки с форматированием сразу.
Жаль.
А выше статья хабре очень интересный функционал с шаблонами.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39769915
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Пасиб.
Я вообще с POI работал с чистыми значениями, без формул и не знаю можно так вообще.
Почитаю еще, как че придумаю напишу.
...
Рейтинг: 0 / 0
И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
    #39770146
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

POI может в формулы Excel.
Только имена функция надо писать по английски, а не по русски (на русском не работают)
Но ИМХО, проще сразу из JasperReports генерит отчет в Excel (правда без формул)
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]