Как получить количество строк в Excel, которые содержат данные (исключая пустые или пустые ячейки) в одном конкретном столбце, используя JAVA, APACHE POI - PullRequest
0 голосов
/ 08 ноября 2019

Попытка прочитать Excel, где мне нужно извлечь количество строк в одном столбце, который содержит данные или значение, кроме пустых или пустых ячеек. И хранить значения ячеек внутри строкового массива. Я пытался использовать sheet.getLastRowNum (), но у меня ничего не получалось. Может ли кто-нибудь предложить выход.

, вот что я пробовал до сих пор

private void readExcel() 
{
    InputStream ExcelFileToRead = new FileInputStream("C:/Users/Public/template.xlsx");
    XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);
    XSSFWorkbook test = new XSSFWorkbook();
    XSSFSheet sheet = wb.getSheetAt(0);
    XSSFRow row=null;
    XSSFCell cell;   
    String[] strArray=null;
    int i=10;

    for(i=10;i<this.sheet.getLastRowNum();i++)
    {
        if( (getCell("G"+i)!=null) ) 
        {                
            strArray[index]= strArray[index] + getCell("G"+i).toString() ;
        }           
    }
      System.out.println(strArray);
}

private XSSFCell getCell(String cellName)
{
    Pattern r = Pattern.compile("^([A-Z]+)([0-9]+)$");
    Matcher m = r.matcher(cellName);
    if(m.matches()) 
    {
        String columnName = m.group(1);
        int rowNumber = Integer.parseInt(m.group(2));
        if(rowNumber > 0) 
        {
            return wb.getSheetAt(0).getRow(rowNumber-1).getCell(CellReference.convertColStringToIndex(columnName));
        }
    }
    return null;
}

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

Лучшая версия, чем принятый ответ:

public static int getNumberOfNonEmptyCells(XSSFSheet sheet, int columnIndex) {
    int numberOfNonEmptyCells = 0;
    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
        XSSFRow row = sheet.getRow(i);
        if (row != null) {
            XSSFCell cell = row.getCell(columnIndex);
            if (cell != null && cell.getCellType() != CellType.BLANK && !cell.getRawValue().trim().isEmpty()) {
                numberOfNonEmptyCells++;
            }
        }
    }
    return numberOfNonEmptyCells;
}

Этот метод имеет 2 преимущества:

  1. Он не использует устаревшие методы с apache-poi 4.0.0
  2. Он не учитывает пустые ячейки, которые делает принятый в настоящее время ответ.

Поскольку я не могу загрузить рабочую книгу, вот часть XML-таблицы, котораяломает принятый метод:

<?xml version="1.0" encoding="UTF-8"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
   <dimension ref="A1:A5" />
   <sheetViews>
      <sheetView tabSelected="1" workbookViewId="0">
         <selection activeCell="A3" sqref="A3" />
      </sheetView>
   </sheetViews>
   <sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25" />
   <sheetData>
      <row r="1" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A1">
            <v>1</v>
         </c>
      </row>
      <row r="2" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A2">
            <v>2</v>
         </c>
      </row>
      <row r="3" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A3">
            <v></v>
         </c>
      </row>

      <row r="4" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A4">
            <v>4</v>
         </c>
      </row>
      <row r="5" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A5">
            <v>5</v>
         </c>
      </row>
   </sheetData>
   <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
</worksheet>

Чтобы использовать это, сделайте следующее:

  1. Создайте пустой файл Excel и сохраните его.
  2. Переименуйте его в файл .zip (в основном Excel является ZIP-архивом)
  3. Откройте архив и перейдите к \xl\worksheets
  4. Замените любой файл sheetX.xml на XMLвыше
  5. Переименуйте файл обратно в .xlsx
  6. Запустите принятую версию и посмотрите вывод 5
  7. Запустите мою версию и посмотрите вывод 4
  8. Откройте файл Excelчтобы увидеть, что присутствуют только 4 значения
1 голос
/ 08 ноября 2019

Я предполагаю, что вы знаете, сколько у вас столбцов, поскольку вопрос касается только количества непустых ячеек в столбце.

Вот метод, который даст правильный результат:

 public static int getNumberOfNonEmptyCells(XSSFSheet sheet,int columnIndex) {
        int numberOfNonEmptyCells = 0;
        for (int i = 0; i <= sheet.getLastRowNum();i++) {
            XSSFRow row = sheet.getRow(i);
            if (row != null) {
                XSSFCell cell = row.getCell(columnIndex);
                if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                    numberOfNonEmptyCells++;
                }
            }
        }
        return numberOfNonEmptyCells;
    }
...