Как собрать ссылки из Excel в arraylist

Я использую arraylist для сбора ссылочных идентификаторов продукта из листа Excel. Я использую POI. Проблема в том, что я не хочу включать пустые ячейки в мой arraylist. Вот мой код:

public static ArrayList<String> extractExcelContentByColumnIndex() { ArrayList<String> columnData=null; try { FileInputStream fis=new FileInputStream(excel_path); Workbook wb=WorkbookFactory.create(fis); Sheet sh=wb.getSheet(sheetname); Iterator<Row> rowIterator=sh.iterator(); columnData=new ArrayList<>(); while(rowIterator.hasNext()) { Row row=rowIterator.next(); Iterator<Cell> cellIterator=row.cellIterator(); while(cellIterator.hasNext()) { Cell cell=cellIterator.next(); if((row.getRowNum()>=3) && (row.getRowNum()<=sh.getPhysicalNumberOfRows())) { if(cell.getColumnIndex()==3)// column under watch { columnData.add(cell.getStringCellValue()); Collections.sort(columnData); } } } } fis.close(); } catch(Exception e) { e.printStackTrace(); } System.err.println("DL BoM = "+columnData); return columnData; } 

И выход:

 DL BoM = [, , , , , , 03141, 03803, 08002, 08012, 08817, 13124, A9C22712, A9N21024, A9N21027, A9N21480] 

Документация POI предоставляет некоторую полезную информацию для этой конкретной темы.

Итерации по клеткам, с контролем отсутствующих / пустых ячеек

В некоторых случаях при повторении требуется полный контроль над тем, как обрабатываются пропущенные или пустые строки и ячейки, и вам нужно убедиться, что вы посещаете каждую ячейку, а не только те, которые определены в файле. (CellIterator вернет только ячейки, определенные в файле, в основном это те, у которых есть значения или стили, но это зависит от Excel).

В таких случаях вы должны получить информацию о первом и последнем столбцах для строки, а затем вызвать getCell (int, MissingCellPolicy) для извлечения ячейки. Используйте MissingCellPolicy для управления обработкой пустых или нулевых ячеек.

 // Decide which rows to process int rowStart = Math.min(15, sheet.getFirstRowNum()); int rowEnd = Math.max(1400, sheet.getLastRowNum()); for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { Row r = sheet.getRow(rowNum); if (r == null) { // This whole row is empty // Handle it as needed continue; } int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT); for (int cn = 0; cn < lastColumn; cn++) { Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL); if (c == null) { // The spreadsheet is empty in this cell } else { // Do something useful with the cell's contents } } } 

Источник: http://poi.apache.org/spreadsheet/quick-guide.html#Iterator

Перед тем, как получить значение ячейки .. проверьте, не пустое

  if(cell.getColumnIndex()==3)// column under watch { if(cell.getStringCellValue().Trim() != "") { columnData.add(cell.getStringCellValue()); } Collections.sort(columnData); } 
  • Не могу найти объединенную ячейку в excel с java
  • JXL читает ячейку гиперссылки из Excel с помощью Java
  • Преобразование файла свойств в excel
  • Не удалось создать отчет BIRT с помощью spudsoft-birt-excel-emitters - Error.InvalidEmitterID
  • Создание Excel и отправка листа по электронной почте в JSP
  • Как я могу заполнить JTable из файла excel, если в моем списке массивов содержится более одного элемента соответствия?
  • Java Apache POI - XSSFCell setFillBackgroundColor не имеет эффекта
  • Запись динамических веб-элементов в XLSX с помощью веб-драйвера Apache POI-Selenium
  • зная, имеет ли excel какие-либо столбцы или нет в POI
  • Не удалось прочитать файлы excel в java, получив 2 ниже ошибки в java
  • 71674705 значение, преобразованное в 7.1674705E
  • Давайте будем гением компьютера.