Прочитать пустую ячейку с помощью Apache POI Event model

У меня есть огромный файл Excel с тоннами столбцов, который выглядит так:

Column1 Column2 Column3 Column4 Column5
abc             def             ghi
        mno             pqr
......

Результат, сгенерированный моим кодом при печати всех значений в excel: -

abc;def;ghi;null;null

mno;pqr;null;null;null

Итак, если мы посмотрим на выведенный выше результат, мы заметим, что ячейки, в которых я оставил пустые значения, не были собраны библиотекой POI. Есть ли способ, которым я могу получить эти значения как null? Или способ признать, что представленные значения пропускают пустые ячейки?

Обратите внимание: я не использую usermodel (org.apache.poi.ss.usermodel), но API событий для обработки файлов xls и xlsx.

Я реализую HSSFListener и переопределяя метод processRecord (запись) для файлов xls. Для xlsx-файлов я использую javax.xml.parsers.SAXParser и org.xml.sax.XMLReader.

Я использую JDK7 с Apache POI 3.7. Кто-то может помочь?

Я уже видел этот возможный дубликат Как получить значение чистой ячейки Excel в Apache POI? Но это не отвечает на мой вопрос, поскольку я использую Event API.

2
nl ja de
Какой API-интерфейс вы используете?
добавлено автор Buhake Sindi, источник
Какой API-интерфейс вы используете?
добавлено автор Buhake Sindi, источник
Это API событий Apache POI для решения проблемы памяти.
добавлено автор ParagJ, источник
Это API событий Apache POI для решения проблемы памяти.
добавлено автор ParagJ, источник

2 ответы

Yes, it can be done, and there are several examples of it which ship with Apache POI. They all relate to Event based xls/xlsx -> CSV, which looks very close to what you're doing. That makes me worry you may be re-inventing the wheel...

For HSSF event model processing, the example you want to look at is XLS2CSVmra. That is powered by MissingRecordAwareHSSFListener

For XSSF event model, the example you need is XLSX2CSV

2
добавлено
Спасибо Гаграварр, но я решил это сам, сохранив текущий номер столбца. Большое спасибо.
добавлено автор ParagJ, источник
Привет ..... Гагравар, не могли бы вы помочь?
добавлено автор ParagJ, источник
public void endElement (String uri, String localName, String name) throws SAXException {// Обрабатывать последнее содержимое по мере необходимости.//Делаем теперь, поскольку символы() могут вызываться более одного раза, если (nextIsString) {try {int idx = Integer.parseInt (lastContents); lastContents = new XSSFRichTextString (sst.getEntryAt (idx)). toString (); } catch (NumberFormatException e) {}}//v => содержимое ячейки//Вывод после того, как мы увидели содержимое строки if (name.equals ("v")) {values.add (lastContents); } if (name.equals ("row")) {... сделать что-то ...}}
добавлено автор ParagJ, источник
Я проверил svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apac‌ он/& hellip; пример, однако в этом примере он добавляет запятую для любого пустого значения , Как я могу сделать это в моем примере? Ниже мой код:
добавлено автор ParagJ, источник
Я знал, что ты ответишь и спаси меня, как всегда :) Большое спасибо, я посмотрю.
добавлено автор ParagJ, источник
@Gagravarr У меня есть аналогичная проблема, скажем, я использую пример XLSX2CSV и его синтаксический анализ большого листа excel, и я хочу вывести этот поток в текстовый файл только для определенных листов в книге, как бы я это сделал?
добавлено автор Eduardo Dennis, источник
Вероятно, вам будет лучше задавать новый вопрос, так как невозможно понять, что вы делаете, и что не так ...
добавлено автор Gagravarr, источник
@EduardoDennis Шаг один будет задавать новый вопрос для этого, поскольку он действительно не является частью этого ...
добавлено автор Gagravarr, источник
Пример xlxs не очень хорош, вам нужно заранее знать минимальный номер строки.
добавлено автор Jonathan Drapeau, источник
свободно! благодаря
добавлено автор Celso Agra, источник

Yes, it can be done, and there are several examples of it which ship with Apache POI. They all relate to Event based xls/xlsx -> CSV, which looks very close to what you're doing. That makes me worry you may be re-inventing the wheel...

For HSSF event model processing, the example you want to look at is XLS2CSVmra. That is powered by MissingRecordAwareHSSFListener

For XSSF event model, the example you need is XLSX2CSV

2
добавлено
public void endElement (String uri, String localName, String name) throws SAXException {// Обрабатывать последнее содержимое по мере необходимости.//Делаем теперь, поскольку символы() могут вызываться более одного раза, если (nextIsString) {try {int idx = Integer.parseInt (lastContents); lastContents = new XSSFRichTextString (sst.getEntryAt (idx)). toString (); } catch (NumberFormatException e) {}}//v => содержимое ячейки//Вывод после того, как мы увидели содержимое строки if (name.equals ("v")) {values.add (lastContents); } if (name.equals ("row")) {... сделать что-то ...}}
добавлено автор ParagJ, источник
Спасибо Гаграварр, но я решил это сам, сохранив текущий номер столбца. Большое спасибо.
добавлено автор ParagJ, источник
Привет ..... Гагравар, не могли бы вы помочь?
добавлено автор ParagJ, источник
Я проверил svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apac‌ он/& hellip; пример, однако в этом примере он добавляет запятую для любого пустого значения , Как я могу сделать это в моем примере? Ниже мой код:
добавлено автор ParagJ, источник
Я знал, что ты ответишь и спаси меня, как всегда :) Большое спасибо, я посмотрю.
добавлено автор ParagJ, источник
@Gagravarr У меня есть аналогичная проблема, скажем, я использую пример XLSX2CSV и его синтаксический анализ большого листа excel, и я хочу вывести этот поток в текстовый файл только для определенных листов в книге, как бы я это сделал?
добавлено автор Eduardo Dennis, источник
@EduardoDennis Шаг один будет задавать новый вопрос для этого, поскольку он действительно не является частью этого ...
добавлено автор Gagravarr, источник
Вероятно, вам будет лучше задавать новый вопрос, так как невозможно понять, что вы делаете, и что не так ...
добавлено автор Gagravarr, источник
Пример xlxs не очень хорош, вам нужно заранее знать минимальный номер строки.
добавлено автор Jonathan Drapeau, источник
свободно! благодаря
добавлено автор Celso Agra, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async