当前位置: 首页 > 知识库问答 >
问题:

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

端木志诚
2023-03-14

我正在使用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个答案

莘翰采
2023-03-14

参考以下内容:

        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"))

注意:您需要将上面代码中的<code>测试</code>更改为您的列名,如id,根据工作表数据标题的名称

狄宗清
2023-03-14

您只从这里的第11行获取数据:

Row getSchool = firstSheet.getRow(10);

请参阅图纸的文档。getRow(int行数)

返回基于 0 的逻辑行(非物理行)。如果请求未定义的行,则会得到 null。也就是说,第 4 行表示工作表上的第五行。

查看文档中关于如何迭代行和单元格的示例。

您可以使用类似如下的内容:

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

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

如果你想遍历一行中的所有单元格,检查如何遍历单元格,控制丢失/空白单元格。

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
  }
}
 类似资料:
  • 嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。

  • 问题内容: 我正在使用Apache POI库,但是我有一些不想读取的数据-因此,我需要该程序才能从特定的行开始读取文件。 我想要来自第10行之后的单元格和行的所有数据,直到文档为空。我尝试了以下代码。 但这只会为我提供第10行中所有单元格的数据。 我期待收到您的来信:-)。 问题答案: 您仅从此处的第11行获取数据: 请参阅Sheet.getRow(int rownum) 的文档 返回基于0的逻辑

  • 问题内容: 可以说我有一个文本文件:data.txt(包含2000行) 如何从500-1500,然后从1500-2000读取给定的特定行,并显示特定行的输出? 此代码将读取整个文件(2000行) 如何修改上述代码以读取特定行? 问题答案: 我建议使用java.io.LineNumberReader。它扩展了BufferedReader,您可以使用它来获取当前行号 您还可以使用Java 7 ,如果适

  • 问题内容: 使用Apache POI时,我在excel中遇到问题。我可以跨行阅读,但是有时候我只想阅读特定的列。 因此可以读取任何特定列,例如仅“ A”列或仅“ C”列。 我为此使用 Java 语言。 问题答案: heikkim是正确的,这是一些示例代码,这些代码改编自我拥有的一些代码: 对于类似的用途

  • 我在使用Apache POI时遇到excel的问题。我可以跨行阅读,但有时我会在一个情况下,我只想阅读一个特定的列。 那么,是否可以读取任何特定的列,例如只读取“A”列或只读取“C”列。 为此我使用Java语言。

  • 我想从视频中的特定帧读取到特定帧。例如,我的视频由150帧组成,但我想从该视频的第5帧到第134帧读取视频。有可能吗?