Как прочитать пустую ячейку в файле Excel с помощью poi и как добавить эту пустую ячейку в список массивов? - PullRequest
2 голосов
/ 18 апреля 2011
    public void readExcel(String fileName)
    try 
    {
          FileInputStream myInput = new FileInputStream(fileName);
          POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
          HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
          HSSFSheet mySheet = myWorkBook.getSheetAt(0);
          Iterator rowIter = mySheet.rowIterator();
          while(rowIter.hasNext())
          {
             HSSFRow myRow = (HSSFRow) rowIter.next();
             Iterator cellIter = myRow.cellIterator();
             ArrayList cellStoreVector=new ArrayList();
             String header_name = null;
             while(cellIter.hasNext())
             {
                 HSSFCell myCell = (HSSFCell) cellIter.next();
                 // if it is empty cell in  my excel file its not added to
                 // array List                            
                cellStoreVector.add(myCell); 
             }
             cellVectorHolder.add(cellStoreVector);

          } 
        }catch (Exception e)
         {
           e.printStackTrace(); 
         }
         saveToDatabase(cellVectorHolder);
        }

      public void saveToDatabase(ArrayList array)
      {
        for (int i=0;i<array.size(); i++)
        {
             ArrayList cellStoreVector=(ArrayList)array.get(i);
             for (int j=0; j < cellStoreVector.size();j++) 
             {  
                HSSFCell myCell = (HSSFCell)cellStoreVector.get(j);
                String st = myCell.toString();
                System.out.println("values "+st);
             }
     }
 }

Приведенный выше код является моим примером кода для чтения файла Excel и вывода значений в консоль.Здесь у меня проблема при чтении пустых ячеек, и эти пустые ячейки не отображаются в консоли.Поэтому, пожалуйста, дайте мне решение для чтения пустых ячеек и распечатайте этот бланк в консоли.

Ответы [ 3 ]

6 голосов
/ 18 апреля 2011

Из HSSFRow#cellIterator JavaDoc:

Обратите внимание, что 4-й элемент вполне может быть не ячейкой 4, поскольку итератор не будет возвращать неопределенные (нулевые) ячейки.Вызовите getCellNum () для возвращенных ячеек, чтобы узнать, к какой ячейке они относятся.

Это означает, что вам нужно сохранить текущий и последний номер ячейки, и если вы получите разницу больше 1, у вас будет пустое/ неопределенные ячейки между ними, т.е. что-то вроде int numBlankCells = (curCellNum - lastCellNum) - 1;

Другой подход может быть:

short minColIndex = row.getFirstCellNum();
short maxColIndex = row.getLastCellNum();
for(short colIndex = minColIndex; colIndex < maxColIndex; colIndexx++) {
  HSSFCell cell = row.getCell(colIndex);
  if(cell == null) {
    //blank/undefined cell
  }
  else {
    //defined cell which still could be of type HSSFCell.CELL_TYPE_BLANK or contain an empty string
  }
}
1 голос
/ 12 июня 2012
List cellDataList = new ArrayList();
int lineNumber = 0;   

while (rowIterator.hasNext())
{
    HSSFRow hssfRow = (HSSFRow) rowIterator.next();
    //System.out.println("Befor If");
    lineNumber++;
    if(lineNumber==1){continue;}
    //System.out.println("Out side if ");

    Iterator iterator = hssfRow.cellIterator();
    List cellTempList = new ArrayList();
    int current = 0, next = 1;

    while (iterator.hasNext())
    {
        HSSFCell hssfCell = (HSSFCell) iterator.next();
        current = hssfCell.getColumnIndex();

        if(current<next) 
        {
            System.out.println("Condition Satisfied");
        }
        else 
        {
            int loop = current-next;
            System.out.println("inside else Loop value : "+(loop));

            for(int k=0;k<loop+1;k++)
            {
            System.out.println("Adding nulls");
                cellTempList.add(null);
                next = next + 1;
            }
        }

        cellTempList.add(hssfCell);
        next = next + 1;
        System.out.println("At End  next value is : "+next);
    }

    cellDataList.add(cellTempList);
}

Попробуйте этот код, он будет работать.

0 голосов
/ 18 апреля 2011
if(myCell.cellType == NPOI.SS.UserModel.CellType.BLANK)

Вы изменили или перезаписали HSSFCell?Если нет, это должно работать нормально.

...