如何使用Apache POI读取特定行?

时间:2016-05-04 12:23:26

标签: java excel apache apache-poi

我使用的是Apache POI库,但我有一些我不想阅读的数据 - 所以我需要程序开始从特定行读取文件。

我想要来自第10行之后的单元格和行的所有数据,直到文档为空。我尝试过以下代码。

Workbook workbook = new XSSFWorkbook(inputStream);
    Sheet firstSheet = workbook.getSheetAt(0);

    Iterator<Row> iterator = firstSheet.iterator();
    Row getSchool = firstSheet.getRow(10);

    Iterator<Cell> cellIterator = getSchool.cellIterator();

    while (iterator.hasNext())
    {
        while (cellIterator.hasNext())
        {
         ...
        }
    }

但它只会从第10行的单元格中获取所有数据。

我期待着收到你的来信: - )。

2 个答案:

答案 0 :(得分:8)

您只能从第11行获取数据:

Row getSchool = firstSheet.getRow(10);

请参阅Sheet.getRow(int rownum)

的文档
  

返回基于0的逻辑行(非物理行)。   如果您要求未定义的行,则会得到null。这是为了   说第4行代表工作表上的第五行。

查看文档中有关如何Iterate over rows and cells

的示例

您可以使用以下内容:

Workbook workbook = new XSSFWorkbook(inputStream);
Sheet firstSheet = workbook.getSheetAt(0);

for (Row row : firstSheet) {
  for (Cell cell : row) {
     // Do something here
  }
}

如果要遍历行中的所有单元格,请检查Iterate over cells, with control of missing / blank cells的方法。

CellIterator只返回文件中定义的单元格,主要是那些带有值或样式的单元格,但它取决于Excel。

您可以将Row.MissingCellPolicy指定为:

Row.getCell(int, MissingCellPolicy)

以下是一个例子:

int lastColumn = Math.max(row.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

for (int cn = 0; cn < lastColumn; cn++) {
  Cell c = row.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
  }
}

答案 1 :(得分:0)

请参阅以下内容:

        String fileName = "D:\\TestScripts.xls"; // file
        POIFSFileSystem fileSystem = new POIFSFileSystem(new FileInputStream(fileName));
        HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
    //  HSSFSheet sheet = workbook.getSheetAt(0); //Get first Excel Sheet
        HSSFSheet sheet = workbook.getSheet("SheetName"); //Get data as per sheet name
        for (Row row : sheet) { // For each Row.
              Cell cell = row.getCell(0); // Get the Cell at the Index / Column you want.
              if(cell.getStringCellValue().equalsIgnoreCase("test")) {
                  System.out.println(cell.getRow().getLastCellNum());
                  for(int i=0;i<=cell.getRow().getLastCellNum()-1;i++) {
                      System.out.println(cell.getRow().getCell(i));
                  }
              }
           }

如果您不查找任何特定的列数据,请删除以下条件

 if(cell.getStringCellValue().equalsIgnoreCase("test"))