Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Добрый день, коллеги.

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

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

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

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

Кто что думает на эту тему? Как не просто сформировать большой Excel, но и преобразовать его в более понятный (для бухгалтерии) вид?
5 фев 19, 08:41    [21801694]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Лысый дядька
Member

Откуда:
Сообщений: 356
AndronovMV
то что думает на эту тему? Как не просто сформировать большой Excel, но и преобразовать его в более понятный (для бухгалтерии) вид

Думаю, что создавать простую плоскую таблицу несложно любым инструментом, а преобразовывать в какую-то вычурную форму нужно самим Excel-ем.
5 фев 19, 08:52    [21801695]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
Лысый дядька,
+1
У меня юзверь сам делал шаблон и форматировал одну строку с шапкой, а я просто копировал ее на нужное количество)
5 фев 19, 08:55    [21801698]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Garrick
Member

Откуда: Москва
Сообщений: 2907
AndronovMV,

Поточный метод формирования Excel файла не подразумевает возможности "вернуться" к началу файла, что бы что-то там исправить. Движение потока только в одну сторону. Все необходимые промежуточные результаты, надо высчитывать самостоятельно, результаты записывать в нужные ячейки по мере их "появления" в потоке, для форматирования использовать заранее подготовленные (в начале потока) стили. Пример: The simple helper for create Microsoft Excel workbook via Apache POI
5 фев 19, 10:39    [21801769]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7516
AndronovMV
.....Тут конечно закрадывается мысль о том, что на серваке то памяти по более будет и поэтому там не было таких исключений.
....

Дочитав до этого места, закрадывается мысль, что окно с браузером можно закрывать.

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

У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит ( C )
5 фев 19, 10:51    [21801776]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Leonid Kudryavtsev,

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

автор
1. Памяти-то сколько Java машине выделено? Увеличивать не пробывали?

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

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

Этим я занялся сразу как начал получать исключения. И то что память начала засераться именно в либах POI, мне как бы мало помогло. А после, я полез гуглить, где сразу же наткнулся на посылы использовать поточные методы, т.к. они появились, а раньше их не было.
5 фев 19, 11:10    [21801790]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
Побывал! Но если бы вы внимательно прочитали, но поняли что мое решение остановилось на использовании поточного формирования, где соответственно проблемы с памятью отлетают.

Зато вы создали новый топик с новой проблемой.
5 фев 19, 11:54    [21801816]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV,
Теперь можно вернуться к старому методу и еще методам X, Y, Z.
В первом разобраться с памятью. Сколько нужно и можно ли увеличить.
Ну и другие советы отработать.
В том числе использование готовых отчетных серверов по взрослому.
Скрин сложного отчета дайте.
5 фев 19, 11:59    [21801820]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Petro123,
Ну со скрином проблемы, точнее могут быть. Начальство увидит по бошке даст.
Могу сказать что файл получается приблизительно 35 колонок, а строк когда как, 1 000 - 50 000.
Клиенты на которых выполняются отчеты разные, где-то 1 гиг, где то 4 гига оперативы.
Параметры VM: -Xms512m -Xmx4096m. Но это мало поможет, если у клиента 1-2 гига, а отчет большой.

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

Я просто не понимаю, че они так не продумали. У меня самописный ДатаСет может хранить это все в памяти, а POI нет.
5 фев 19, 13:19    [21801897]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Объединение ячеек в POI происходит через метод:
sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);

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

и
sheet.addMergedRegion(2500,5000,1,1);
5 фев 19, 13:25    [21801904]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
Начальство увидит по бошке даст.
это отмаз?
В гугле поиске нет похожего? Докторская? Нобелевская?
..
Почему не сделать шаблоном как я выше писал?
5 фев 19, 13:37    [21801916]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Petro123,

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

Далее конечный пользователь запускает отчет с параметрами и получает Excel.
Из вышесказанного вы должны понять, что эти отчеты не типовые, скорее аналитические. В них нет преамбул и проч. дополнений. Обычная выгрузка, но с подытогами и объеденеными ячейками.
Это должно быть так, потому, что - это просто с точки зрения использования как для разработчика отчета, так и для бухгалтера.

К сообщению приложен файл. Размер - 144Kb
5 фев 19, 14:12    [21801935]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Garrick
Member

Откуда: Москва
Сообщений: 2907
AndronovMV,

Jasper Report не пробовали?
5 фев 19, 14:16    [21801940]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Garrick
Member

Откуда: Москва
Сообщений: 2907
так, наверное, будет правильнее https://community.jaspersoft.com
5 фев 19, 14:17    [21801941]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Garrick,

Уже =)
Но вот хочу выгрузкой SQL -> Excel

К сообщению приложен файл. Размер - 130Kb
5 фев 19, 14:22    [21801943]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4646
AndronovMV,

Отчет japserReport можно сразу сохранять в Excel.
А так, ODBC + VBA + Excel java-не нужно ;-)
5 фев 19, 14:31    [21801947]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
Это должно быть так, потому, что - это просто с точки зрения использования как для разработчика отчета, так и для бухгалтера.

Картинка с другого сайта.
я же сказал как еще проще. Вы ноль реакции.
Юзверь шаблон правит в экселе а не в jTable.
5 фев 19, 14:40    [21801960]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Petro123,
Хорошо, неправильно выразился: - привычнее.
А вообще я не понимаю причем тут шаблон? Шаблон делает разметку, а разметка у меня простая, она сама генерится в виде обычных столбцов. В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?
5 фев 19, 14:50    [21801970]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
mad_nazgul,

Да дело не в том чтобы сразу в Excel, даже пускай предпросмотр будет. Просто отчет в Jaspere нужно все равно рисовать. А тут вариант простой выгрузки с некоторыми атрибутами.
5 фев 19, 14:52    [21801972]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Лысый дядька
Member

Откуда:
Сообщений: 356
AndronovMV
Petro123,
В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?

Ну так а формулы в экселе нафига придуманы? Это если про макросы молчать.
5 фев 19, 15:07    [21801984]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
Лысый дядька
AndronovMV
Petro123,
В шаблоне можно как то задать правила объединения ячеек? или вставки строк подытогов для групп?

Ну так а формулы в экселе нафига придуманы? Это если про макросы молчать.

+1
Аффтар, ты первый раз эксель видишь?
Юзверь пишет формула СУММ в ячейку ИТОГО.
Ты при копировании автоматом формулу проставляешь по колонке.
Итоги сдвигаются вниз красным и жирным.
В коде ячейка.цвет = red нигде не пишем.
Программиста юзверь не зовет.
Дизайнер jTable не делаем.
5 фев 19, 15:41    [21802008]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
Я хочу сделать некий визард
нет.
Лучше так:
Я хочу собственноручный, наколенный, велосипедный генератор отчетов.
5 фев 19, 15:45    [21802013]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
Просто отчет в Jaspere нужно все равно рисовать. А тут вариант простой выгрузки с некоторыми атрибутами.
не понял.
Выше скрины ведь все окошки рукописные?
5 фев 19, 15:51    [21802017]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
AndronovMV
Member

Откуда: Тольятти
Сообщений: 123
Petro123,

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

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

Вообще я так и знал, что тема начнет плавно утекать в сторону альтернативных решений и фраз типа не "изобретай велосипед", т.к. отвечающим тяжело понять многих аспектов, в том числе область применения, и даже такие вещи как есть бухгалтер, тётя Мотя и вот ей надо именно так, именно здесь, даже если это уже объективно сложнее делать. А также, что есть определенный стек и прикручивать лишнее никому не захочется и даже мне.
5 фев 19, 16:53    [21802069]     Ответить | Цитировать Сообщить модератору
 Re: И опять Apache POI. Потоковое создание excel со слиянием ячеек и подытогами.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37973
AndronovMV
У вас есть реализация, хотя бы простейшая своего решения?

Решение чего?
Скопировать всю строку #2 с получением строки #3 и вторую заполнить ячейки?
2. Хотя бы с jasper решением сравни нормально. У тебя скрин простейшего отчета.
3. Ты выше сам ушел от решения ошибки по памяти в сторону стримов. Разве нет?
А мы типо не имеем право?
5 фев 19, 17:14    [21802086]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить