Apache POI SAX Parsing – Как получить фактическое значение ячейки

У меня было требование анализировать очень большие файлы excel, используя apache poi с предельной памятью. После googling я узнал, что poi предоставляет SAX-парсер для эффективного анализа большого файла, не потребляя много памяти.

Пример Apache POI SAX Parser

private class SheetToCSV implements SheetContentsHandler { private boolean firstCellOfRow = false; private int currentRow = -1; private int currentCol = -1; private void outputMissingRows(int number) { for (int i=0; i<number; i++) { for (int j=0; j<minColumns; j++) { output.append(','); } output.append('\n'); } } @Override public void startRow(int rowNum) { // If there were gaps, output the missing rows outputMissingRows(rowNum-currentRow-1); // Prepare for this row firstCellOfRow = true; currentRow = rowNum; currentCol = -1; } @Override public void endRow(int rowNum) { // Ensure the minimum number of columns for (int i=currentCol; i<minColumns; i++) { output.append(','); } output.append('\n'); } @Override public void cell(String cellReference, String formattedValue, XSSFComment comment) { if (firstCellOfRow) { firstCellOfRow = false; } else { output.append(','); } // gracefully handle missing CellRef here in a similar way as XSSFCell does if(cellReference == null) { cellReference = new CellAddress(currentRow, currentCol).formatAsString(); } // Did we miss any cells? int thisCol = (new CellReference(cellReference)).getCol(); int missedCols = thisCol - currentCol - 1; for (int i=0; i<missedCols; i++) { output.append(','); } currentCol = thisCol; // Number or string? try { Double.parseDouble(formattedValue); output.append(formattedValue); } catch (NumberFormatException e) { output.append('"'); output.append(formattedValue); output.append('"'); } } @Override public void headerFooter(String text, boolean isHeader, String tagName) { // Skip, no headers or footers in CSV } } 

В примере, приведенном в приведенной выше ссылке, метод «ячейка» имеет доступ только к форматируемому значению, но мне нужно получить доступ к фактическому значению ячейки.

Текущая реализация потокового интерфейса не обеспечивает этого. Поэтому для этого вам необходимо скопировать код базового XSSFSheetXMLHandler и настроить его так, чтобы содержимое ячейки не форматировалось.

  • Как использовать команду xlswrite в Mac-версии MatLab?
  • Как создать новый файл excel в Java-приложении и сохранить его в указанном месте?
  • Как заблокировать только содержимое ячейки в листе Excel
  • API-интерфейс Excel POI, изменяющий значение ячейки
  • Вычисление значения формулы рекурсии в EXCEL с использованием POI
  • как установить стиль ячейки без экземпляра HSSFWorkbook?
  • Auto Fit Row и Column не работают с Jasper Report?
  • Чтение диапазонов ячеек с использованием POI в java?
  • Сохранить файл .xls в Java
  • Java POI - вставка строк в виде столбцов
  • Установите высоту изображения с высотой строки в excel с помощью apache poi
  • Interesting Posts

    Совмещение похожих имен для объединения данных

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

    Старые данные Excel – слияние с журналом транзакций SQL

    Как я прохожу через Autofilter, используя VBA в excel?

    Как написать ячейку Excel рядом с выбранной ячейкой?

    Кнопка загрузки данных Excel

    Слияние и выравнивание центральной ячейки с помощью apache poi

    Ошибка 1004 при использовании переменной в качестве всей детали автофильтра (Excel VBA)

    Экспорт данных в новую книгу независимо от языковых настроек в VBA

    Как создать файл .xlsx с помощью PdfReport

    Excel, получить n-й результат из именованного диапазона листов

    Excels Macro для API

    matlab производит файл excel в графическом интерфейсе

    IF Столбец AJ содержит «Клиент», а затем «Применить фильтр» в B: B Else In VBA

    Ошибка Microsoft.Jet.OLEDB.4.0, когда Excel не запущен. Как это исправить?

    Давайте будем гением компьютера.