API для записи огромных файлов Excel с помощью Java

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

Лично у меня нет проблемы с кодом путем, Вы представили его. Походит на совершенно разумный способ зарегистрировать перечисление мне.

16
задан Jaskirat 28 September 2009 в 09:15
поделиться

7 ответов

Все существующие API Java пытаются сразу собрать весь документ в ОЗУ. Попробуйте вместо этого написать XML-файл, соответствующий новому формату файла xslx. Для начала я предлагаю создать в Excel небольшой файл нужной формы и сохранить его. Затем откройте его, изучите структуру и замените нужные части.

В Википедии есть хорошая статья об общем формате .

6
ответ дан 30 November 2019 в 21:29
поделиться

Взгляните на сериализатор HSSF из проекта кокона.

Сериализатор HSSF улавливает события SAX и создает электронную таблицу в формате XLS, используемом Microsoft Excel

3
ответ дан 30 November 2019 в 21:29
поделиться

Также есть JExcelApi, но он использует больше памяти. Я думаю, вам следует создать файл .csv и открыть его в Excel. он позволяет вам передавать много данных, но вы не сможете творить "магию excel".

2
ответ дан 30 November 2019 в 21:29
поделиться

Возникает ли эта проблема с памятью, когда вы вставляете данные в ячейку или когда выполняете вычисление / генерацию данных?

Если вы собираетесь загружать файлы в Excel, которые состоят из предопределенного статического шаблона формат, то лучше сохранить шаблон и использовать многократно. Обычно случаи шаблонов возникают, когда вы собираетесь генерировать ежедневный отчет о продажах и т. Д.

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

Пока что Apache POI является единственным выбор я нашел.

«Ясно, что запись ~ 20 тыс. Строк (по 10-20 столбцов в каждой) дает мне ужасную ошибку« java.lang.OutOfMemoryError: пространство кучи Java ».»

«Корпоративные ИТ»

Что ВЫ CAN DO выполняет пакетную вставку данных. Создайте таблицу задач очереди, каждый раз после создания 1 страницы, отдыхайте в течение нескольких секунд, затем продолжайте вторую часть. Если вы беспокоитесь о динамических изменениях данных во время выполнения задачи с очередью, вы можете сначала получить первичный ключ в Excel (скрыв и заблокировав столбец из пользовательского представления). Первый запуск - это вставка первичного ключа, затем второй запуск очереди будет считываться из блокнота и выполнять задачу по частям.

0
ответ дан 30 November 2019 в 21:29
поделиться

Мы сделали что-то очень похожее, с таким же объемом данных, и нам пришлось переключиться на JExcelapi, потому что для POI очень много ресурсов. Попробуйте JexcelApi, вы не пожалеете, если вам придется манипулировать большими Excel-файлами!

0
ответ дан 30 November 2019 в 21:29
поделиться

Рассмотрите возможность использования формата CSV. Таким образом, вы больше не ограничены памятью - ну, может быть, только во время предварительного заполнения данных для CSV, но это также можно сделать эффективно, например, запрашивая подмножества строк из БД, используя, например, LIMIT / OFFSET и немедленно записать его в файл вместо того, чтобы переносить все содержимое таблицы БД в память Java перед записью любой строки. Ограничение Excel на количество строк на одном «листе» увеличится примерно до одного миллиона.

Тем не менее, если данные на самом деле поступают из БД, я бы сильно пересмотрел, является ли Java подходящим инструментом для этого. Большинство приличных БД имеют функцию экспорта в CSV, которая, несомненно, может выполнять эту задачу намного эффективнее. В случае, например, MySQL, вы можете использовать для этого команду LOAD DATA INFILE .

1
ответ дан 30 November 2019 в 21:29
поделиться

Мне пришлось разбить мои файлы на несколько файлов Excel, чтобы преодолеть исключение пространства кучи. Я подумал, что об этом было около 5 тыс. Строк с 22 столбцами, поэтому я просто сделал свою логику так, чтобы каждые 5 тыс. Строк я заканчивал файл, начинал новую и просто нумерул файлы соответственно.

В тех случаях, когда мне нужно было записать более 20 тысяч строк, у меня было бы 4+ разных файла, представляющих данные.

4
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: