如果第一个和最后一个单元格值为空或空白,如何读取Excel工作表行的每个单元格的值?

时间:2017-10-08 19:05:59

标签: java excel

这是excel表

-----------------------------------------------------------------------
col1 | Col2 | col3 | col4 | col5| col6| col7|   and so on
-----------------------------------------------------------------------
1    | 2    |   3  |   4   |  5 |  6|    7|     and so on
------------------------------------------------------------------------
     |      |   3  |   4   |  5 |   |     |     and so on
------------------------------------------------------------------------

我的输出应该是 空白空白3 4 5空白空白

我正在使用Iterator<Cell> cell=row.cellIterator阅读此Excel工作表 我想用Blank读取每个单元格的值,但是使用CellIterator我只能从第2行读取3 4 5。

如何阅读带空格的第二行?我还看到如果第一个单元格和最后一个单元格不是空白,那么CellIterator也会成功读取空白值。

如果该行的第一个和最后一个单元格为空,如何读取java中特定行的每个单元格值?

1 个答案:

答案 0 :(得分:0)

我将假设您正在使用Apache POI进行Excel操作。

CellIterator只会返回文件中已定义的单元格,这主要是指具有值或格式的单元格。

请参阅http://poi.apache.org/spreadsheet/quick-guide.html#Iterate+over+cells%2C+with+control+of+missing+%2F+blank+cells

  

迭代细胞,控制缺失/空白细胞

     

在某些情况下,在迭代时,您需要完全控制缺失或空白行和单元格的处理方式,并且您需要确保访问每个单元格而不仅仅是文件中定义的单元格。 (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
      }
   }
}