|
|
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Пробовал открыть xslx просто: Код: java 1. Вылетает по аутофмемори. Посмотрел , народ пишет, надо использовать SXSSFWorkbook, но примера, как читать с пом. SXSSFWorkbook не нашел, в основном примеры записи большого xslx, с чтением непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 14:45 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
в гугле забанен? http://stackoverflow.com/questions/12513981/reading-data-from-xlsx-with-apache-pois-sxssfsheet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 15:09 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
chpashaв гугле забанен? Окак: You can't. SXSSFWorkBook is write only, it doesn't support reading For low memory reading of .xlsx files, you should look at the XSSF and SAX EventModel documentation Капец, то есть нужно некий SAX ковырять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 15:24 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
JDSchpashaв гугле забанен? Окак: You can't. SXSSFWorkBook is write only, it doesn't support reading For low memory reading of .xlsx files, you should look at the XSSF and SAX EventModel documentation Капец, то есть нужно некий SAX ковырять? там в ответе и ссылка есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 15:29 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
chpashaтам в ответе и ссылка есть Ага видел. Курю потихоньку. Спасиб ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 15:32 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Пробую тот пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Ломается на getSharedStringsTable: автор Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject at org.apache.poi.xssf.eventusermodel.XSSFReader.getSharedStringsTable(XSSFReader.java:82) Плюс не пропускает XSSFRichTextString и getEntryAt в Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Говорит, вроде как неправильный тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 16:06 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Почитал. Подключил xmlbeans-2.3.0.jar, saxon9.jar, saxon9-dom.jar пошло дальше. Теперь ломаемся на Код: java 1. org.xml.sax.SAXException: SAX2 driver class org.apache.xerces.parsers.SAXParser not found Почитал. Подключил из xerces: xsercesiml.jar и xml-apis.jar Вроде зашуршало. Но это ж какая-то беда постоянно так кодить, копаясь в гугле, когда надо сваять что-то новое неужели все так живут? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 16:56 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Теперь такая засада. parser.parse(sheetSource); Начинает читать файл сначала и до конца. При этом адреса ячеек выводит типа A1, B1, C1 и т.д. Можно ли как-то обращаться по конкретному адресу ячейки при чем по номерам ячеек типа (1,1) (2,1) и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 17:09 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
JDSВылетает по аутофмемори. А просто побольше памяти выделить не пробовали? -Xmx512m? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 21:50 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
GarrickА просто побольше памяти выделить не пробовали? -Xmx512m? Почему-то сразу отбросил этот вариант, т.к. при открытии этого файла ява-процесс отожрал больше гига каким-то чудом, хотя в файле всего около 100т записей (полей много правда), предположительно могут встречаться и файлы с бОльшим количеством. Попробую увеличить, но если через SAX, выходит, что прежде надо будет например или закачать в память, но лучше наверно конвертировать хотя бы в обычный текстивик, а потом уже заливать (в базу надо закачать)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2015, 22:25 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Похоже, придется сначала перелить например в xls или ods, а потом уже работать, обращаясь по адресам ячеек :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 11:10 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Ну да. Кто ж в xls засунет 100к записей. Есть еще вариант перелить все во временную табличку с двумя полями: 1. индексированное поле - адрес ячейки 2. значение Может есть вариант создать индексированный файл? ) Можно самому намутить файл и индекс к нему или что-то навроде того, но тоже видится каким-то бредовым решением. И вообще все это не вписывается в общую модель, т.е. хотелось бы иметь общий интерфейс для обращения ко всем типам файлов (опенофис и мсексель)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 11:56 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
я правильно понял, ты забил на saxparser, потому что он тебе ячейки не в том формате выкидывает и теперь сидишь тут изобретаешь варианты один чудней другого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 12:57 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
chpashaя правильно понял, ты забил на saxparser Не совсем забил, но почти. То есть взял код из примера: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. Который в startElement вроде как ловит адрес ячейки, в endElement содержимое ячейки, но в целом походу метод parse читает подряд весь файл и при этом не нашел возможности обращаться к ячейкам поадресно, а изучать весь этот SAX (если там вообще есть такая возможность) времени пока нет, может позже. Поэтому пока пишу вывод во временную табличку в БД, а уже с ней буду работать по ячейкам :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 14:04 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Да. Заливать в базу файл в 100к записей пусть даже в 20 полей, разворачивая его "вертикально" по одной ячейке и получая на выходе 2млн записей - это бред конечно. Остается или как-то научиться адресоваться к ячейкам c помощью SAX или не трахать себе мозг, а поставить MSOffice и открывать файлы им, но на машине с линуксом тоже не вариант походу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 15:43 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
я может чего проглядел, зачем нужно адресовать целенаправленно, если задача была прочитать и залить в базу? принцип работы saxparser-а всега один и тот же, он кидает тебе всю инфу, которая есть, ты выбираешь себе то что надо. Не прямая адресация "дай мне ячейку 1,2", а фильтрация - "если ячейка 1,2 -> то" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 16:15 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
chpashaя может чего проглядел, зачем нужно адресовать целенаправленно, если задача была прочитать и залить в базу? принцип работы saxparser-а всега один и тот же, он кидает тебе всю инфу, которая есть, ты выбираешь себе то что надо. Не прямая адресация "дай мне ячейку 1,2", а фильтрация - "если ячейка 1,2 -> то" Да. Это понял, если в этом паресере нет прямой адресации, то не очень. Прежде чем заливать данные в БД, мне необходимо сопоставить поля (т.к. файлы не имеют единого формата), поэтому прежде перебираю листы файла (данные могут быть на любом листе), по контексту ищу нечто похожее на заголовок (необязательно он с первой строки и не обязательно занимает одну строку и т.д.), сопоставляю поля файла с полями в таблице БД (могут переставляться местами, добавляться новые) и дальше пошел читать все, что ниже заголовка, заливать в БД. chpashaа фильтрация - "если ячейка 1,2 -> то Да. Можно конечно и в этом варианте точно так же вычленить заголовок, сделать кроссировку и заливать дальше, просто помимо того, что нет единого формата файлы в принципе могут быть разными xls, ods, xlsx и для всех трех в принципе запилил общий интерфейс, только внутренняя реализация самого чтения отличалась, сейчас же из-за того, что не выходит адресоваться напрямую для xlsx эта универсальность немного рушится или ее надо переделывать, то есть типа убирать общий метод условно GetCell, а делать более глобальные методы классов типа LoadIntoDataBase. Т.е. до этого у меня была общая процедура разбора заголовков для всех типов файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 16:42 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
JDSДа. Это понял, если в этом паресере нет прямой адресации, то не очень. А как ты себе такой парсер представляешь? Ты ему координаты, а он такой бац и по ним вычислил позицию в файле где читать значение? Это же не база данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 16:57 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Может есть аналог JRSwapFileVirtualizer как в Jasper? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 17:05 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭто же не база данных Понимаю конечно, но надеялся на чудо ))) Всем спасибо, придется делать xlsx разбор "на лету" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 17:10 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Кстати как быть с датами? Они ж читаются просто как цифры. Если посмотреть что пишут про формат хранения даты в екселе, то типа это кол-во дней, начиная с 01.01.1900. В моем же случае опытным путем видно, что это кол-во дней, начиная с 30.12.1899. Это что может меняться от файла к файлу ) Или от версии к версии офиса? ) Как быть в общем с датой? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:45 |
|
||
|
POI и xlsx OutOfMemory открыть с пом. SXSSFWorkbook
|
|||
|---|---|---|---|
|
#18+
Вот еще нашел Тип Date При работе с этим типом данных следует иметь ввиду, что VBA-типы Date не являются такими же типами, как в рабочих листах Excel, хотя во многом и схожи с ними. Например, базовой датой для VBA-типа Date является 30 декабря 1899 года, а в Excel - 1 января 1900 года И с огромной долей вероятности xlsx заполнен именно с помощью vba-макроса, а учитывая вышесказанное, вроде как и объясняется почему в ячеках числа с отсчетом с 1899-го. Но это ж трыднец какой-то :( Вот пришел к тебе MSxlsx и как понять программно то ли с 1900, то ли 1899 циферки дат?? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:07 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39132223&tid=2124500]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 435ms |

| 0 / 0 |
