web-dev-qa-db-ja.com

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のセルからのすべてのデータしか表示されません。

ご連絡をお待ちしております:-)。

4
Grumme

ここでは、行11からのみデータを取得しています。

Row getSchool = firstSheet.getRow(10);

Sheet.getRow(int rownum) のドキュメントを参照してください

0ベースの論理行(物理行ではない)を返します。定義されていない行を要求すると、nullが発生します。つまり、行4はシートの5番目の行を表します。

方法については、ドキュメントの例を確認してください 行とセルを反復処理

次のようなものを使用できます。

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

以下を参照してください。

        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"))
0
Shubham Jain