powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / POI
15 сообщений из 15, страница 1 из 1
POI
    #34125359
bruder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError. Смотрел где то на форумах предлагают увеличить виртуальную память jvm, но в моем случае это не подходит. МОжно как нить решить проблему?
...
Рейтинг: 0 / 0
POI
    #34125375
anton_evane
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдели для VM больше памяти или пиши данные пакетным образом
...
Рейтинг: 0 / 0
POI
    #34125416
hubamuba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bruderпривет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError.

извините, нифига не понял - что куда должно 'переводить' данные?
...
Рейтинг: 0 / 0
POI
    #34125421
bruder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл напечатать - перевести в Excel.

anton_evane пиши данные пакетным образом
Вот об этом пожалуйта поподробнее. Чувствую это неплохое решение
...
Рейтинг: 0 / 0
POI
    #34125455
hubamuba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bruderЗабыл напечатать - перевести в Excel.

anton_evane пиши данные пакетным образом
Вот об этом пожалуйта поподробнее. Чувствую это неплохое решение

вынуджен огорчить. POI, как впрочем и всякие JExcelApi, не имеет 'stream' режима. т.е. сперва все данные книги (листа) загоняются в память, и только потом есть возможность сохранить данные из памяти на диск. соответственно, либо увеличивать кол-во доступной памяти, либо можешь поискать jdbc-odbc мост для excel'я (если речь идет о windows платформе)
...
Рейтинг: 0 / 0
POI
    #34127560
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то если надо очень большую таблицу вывести так, чтобы она читалась MS Excel, можно выдать CSV файл. Его можно писать в поток (в файл или в сокет) построчно.
...
Рейтинг: 0 / 0
POI
    #34128029
bruder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hubamuba спасибо за ответ. Да, это полная лажа, потому что от POI пидется отказатся, а алтернативы пока не знаю. А вот такой вопрос: может можно например создавать отдельные Sheet и записывать их в уже созданную ранее workbook(в которой уже есть другие sheets)? тоже был бы вариант.
...
Рейтинг: 0 / 0
POI
    #34128074
hubamuba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bruder hubamuba спасибо за ответ. Да, это полная лажа, потому что от POI пидется отказатся, а алтернативы пока не знаю. А вот такой вопрос: может можно например создавать отдельные Sheet и записывать их в уже созданную ранее workbook(в которой уже есть другие sheets)? тоже был бы вариант.

теоретически можно. копай в сторону:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    POIFSFileSystem fs      =
             new  POIFSFileSystem( new  FileInputStream("workbook.xls"));
    HSSFWorkbook wb =  new  HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt( 0 );
    ....
    // Write the output to a file
    FileOutputStream fileOut =  new  FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();

только вот вопрос в том, а хватит ли тебе памяти хотя бы для одного листа... зависит от кол-ва столбцов и степени их заполненности данными.

М.ГоловановВообще-то если надо очень большую таблицу вывести так, чтобы она читалась MS Excel, можно выдать CSV файл. Его можно писать в поток (в файл или в сокет) построчно.

безусловно можно. тока придется забыть о форматировании.
чтоб сравнить, достаточно залить csv файл в excel и открыть такой же файл сгенеренный poi или jexcelapi (ессно с форматированием и т.д).
небо и земля :)
...
Рейтинг: 0 / 0
POI
    #34128187
bruder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hubamuba
только вот вопрос в том, а хватит ли тебе памяти хотя бы для одного листа... зависит от кол-ва столбцов и степени их заполненности данными.

действительно не подумал. Хотя я Excel знаю плохо, и не знаю какой тип данных самый большой(надеюсь не как в msSQL - image до 2 гигов), может и можно как нить определить размер листа в процессе конвертации. То что ты посоветовал уже что то, обнадеживает, огромное спасибо :). Пойду Excel учить..
...
Рейтинг: 0 / 0
POI
    #34128653
anton_evane
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтернатива Jacob только теряется кроссплатформенность
...
Рейтинг: 0 / 0
POI
    #34128905
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bruderпривет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError. Смотрел где то на форумах предлагают увеличить виртуальную память jvm, но в моем случае это не подходит. МОжно как нить решить проблему?

По-моему тут по форуму пробегала ссылка на пропатченый каким-то энтузиастом вариант POI на тему снижения потребления памяти.

Кроме того эксель вроде бы тебе и так не даст на один лист запихать 150000 записей а только что-то в район 65535 записей

поищи по форуму или по инету что-то вроде poi-2.5.1-final-patched.jar
...
Рейтинг: 0 / 0
POI
    #34129188
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.
...
Рейтинг: 0 / 0
POI
    #34129448
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalexakaМожет кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.Вроде это не лечится.
...
Рейтинг: 0 / 0
POI
    #34129458
hubamuba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zalexakaМожет кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.

Код: plaintext
1.
    _sheet = _wb.createSheet();
    _wb.setSheetName(_wb.getNumberOfSheets()- 1 , sheetname, HSSFWorkbook.ENCODING_UTF_16);

думаю понятно о чем я...
...
Рейтинг: 0 / 0
POI
    #34129514
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я и думал спасибочки
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / POI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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