2013-12-19 3 views
2

Я использую библиотеку POI Apache для импорта большого количества данных в файлы Excel. Я не могу использовать HSSF-модель, потому что ей требуется слишком много памяти, а Java выдает исключение кучи памяти. То, как я нашел, это модель рабочей книги SXSSF, которая записывает каждый N строк в файл вместо хранения всей книги в памяти. Но я не могу найти способ, как сохранить его в .xls (Excel 2003 и более низкий формат) вместо .xlsx.Сохранение файла SXSSF как .xls

File f = new File("file.xlsx"); 
f.createNewFile(); 
SXSSFWorkbook wb = new SXSSFWorkbook(200); 
//inputing values here 
FileOutputStream fileOut = new FileOutputStream(f); 
wb.write(fileOut); 
fileOut.close(); 

ответ

4

Вы не можете.

Как explained on the POI Components page, HSSF для работы с файлами .xls (OLE2 основе), и XSSF/SXSSF для работы с файлами .xlsx (.xlsx)

Если вы хотите создать файл .xls, вам Придется использовать HMSF UserModel. Нет поддержки потоковой записи для HSSF, только streaming read.

Формат файла .xls не очень хорошо подходит для потоковой записи в формате .xlsx (больше обратных/форвардных ссылок, смещений и т. Д.), Поэтому в HSSF нет поддержки потоковой записи. Просто поднимите размер кучи Java или переключитесь на SXSSF на .xlsx или просто используйте что-то простое, как CSV!

.

Update Если вам нужно проверить, сколько памяти вы должны давать в вашу систему для записи с HSSF или даже XSSF, я предлагаю вам попробовать использовать SSPerformanceTest example, который может быть запущен по команде линия. Огонь со всеми баночками и заданный размер кучи, и посмотрите, завершается ли это. Он принимает аргументы количества строк и столбцов и типа создаваемого файла. Используя ночную сборку и пытается за 40k строк/10 столбцов, я могу получить его, чтобы быстро завершить в 90MB куче:

$ java -Xmx90m -classpath poi-3.10-beta3-20131219.jar:poi-examples-3.10-beta3-20131219.jar:poi-ooxml-3.10-beta3-20131219.jar \ 
    org.apache.poi.ss.examples.SSPerformanceTest HSSF 40000 10 1 
Elapsed 1 seconds 
+0

Я установил 2k барана кучи для приложения, но этого было недостаточно. И на ПК пользователей нет режима, поэтому я не могу увеличить размер кучи. Тогда единственный способ использовать .xlsx? – crzbt

+0

Если вы экспортируете огромное количество данных, вам все равно нужно использовать .xlsx, поскольку .xls имеет довольно небольшие (по современным меркам) ограничения на количество строк и столбцов. Если вам удастся использовать 2 ГБ памяти, то вы почти наверняка находитесь в этих пределах! – Gagravarr

+0

У меня есть ~ 40k строк и ~ 7-10 столбцов. Насколько я знаю, файлы xls могут обрабатывать до 65536, что может быть достаточно для меня – crzbt

Смежные вопросы