从Excel文件中读取特定行

时间:2014-03-10 03:39:29

标签: excel apache-poi

我有一个大约7000行的Excel文件。 Excel文件包含目录和实际内容数据,详情如下。

我想避免内容列表的所有行,并从实际内容数据开始阅读。这是因为如果我需要读取“CPU_INFO”的数据,则循环和搜索字符串出现两次1]来自内容表和2]来自实际内容。

所以我想知道是否有任何方法可以指向Start Row Index开始读取Excel File的数据内容,从而跳过整个Table Of Content Section?

1 个答案:

答案 0 :(得分:1)

取自Apache POI documentation on iterating over rows and cells

  

在某些情况下,在迭代时,您需要完全控制缺失或空白行或单元格的处理方式,并且您需要确保访问每个单元格而不仅仅是文件中定义的单元格。 (CellIterator将仅返回文件中定义的单元格,主要是具有值或样式的单元格,但它取决于Excel)。

     

在这些情况下,您应该获取一行的第一个和最后一个列信息,然后调用getCell(int,MissingCellPolicy)来获取该单元格。使用MissingCellPolicy来控制处理空白或空单元格的方式。

如果我们从该文档中获取示例代码,并根据您在第7000行开始的要求调整它,并假设您不想超过15k行,我们得到:

// Decide which rows to process
int rowStart = Math.min(7000, sheet.getFirstRowNum());
int rowEnd = Math.max(1500, sheet.getLastRowNum());

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
   Row r = sheet.getRow(rowNum);

   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
      }
   }
}