3

POIを使用してExcelからデータを読み取ろうとしています。それが空のセルであるかどうかを確認するにはどうすればよいですか?

何が欠けているのかわかりません。これでうまくいくはずです。

java.util.Iterator<Row> rows = worksheet.rowIterator();

HSSFRow row = (HSSFRow) rows.next();
HSSFCell cellF1 = (HSSFCell) row.getCell(5);
if(cellF1.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
  String val = "";
}

ifステートメント(nullポインター)でエラーが発生しましたが、これを使用した場合にのみ、次のことを確認できます。

   while (rows.hasNext()) {
    HSSFRow row = (HSSFRow) rows.next();
    java.util.Iterator<Cell> cells = row.cellIterator();
    while (cells.hasNext()) {
      HSSFCell cell = (HSSFCell) cells.next();
      if(cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
        String emptytype = "";
        System.out.println("empty");
      }
    }
  }
4

5 に答える 5

9

これは、引数が 1 つのバージョンの の通常の動作ですRow.getCell。API doc を見るとgetCell、セルが定義されていない場合は null を返すと具体的に述べられています。多くの Java 関数はこの種の動作を示すため、これを考慮してコーディングすることには何の問題もありません。したがって、コードの 1 つのバージョンは次のようになります。

boolean hasDataFlag = true;    
HSSFRow row = sheet.getRow(rowNumber);
hasDataFlag = (row != null);
HSSFCell cell = null;
if (hasDataFlag) cell = row.getCell(cellNumber);
hasDataFlag = (cell != null);
if (hasDataFlag) hasDataFlag = (cell.getCellType() != Cell.CELL_TYPE_BLANK);
if (hasDataFlag) {
    // process the cell here
}

Row.getCellまたは、欠落しているセル ポリシーを指定する 2 番目の引数を取る、他のバージョンの を使用することもできます。このバージョンではgetCell、空白セルに対して null セルを返すように指定できます。したがって、ここにいくつかの代替コードがあります:

HSSFRow row = sheet.getRow(rowNumber);
if (row != null) {
    HSSFCell cell = row.getCell(cellNumber, Row.RETURN_BLANK_AS_NULL);
    if (cell != null) {
        // process cell here
    }
}

または、必要に応じて、ポリシーを として指定することもできますRow.CREATE_NULL_AS_BLANK。その場合は、 に置き換えif (cell != null)ますif (cell.getCellType() != Cell.CELL_TYPE_BLANK)

于 2012-06-22T23:37:52.620 に答える
5

を使用するとCellIterator、ある時点で定義されたセルのみが取得されます (nullセルは取得されませんが、セルは取得されますblank)。すべてのセルを取得する場合は、インデックスでフェッチします

インデックスでは、次のようにします。

 Sheet sheet = workbook.getSheetAt(0);
 for (int rowNumber = sheet.getFirstRowNum(); rowNumber <= sheet.getLastRowNum(); rowNumber++) {
    Row row = sheet.getRow(rowNumber);
    if (row == null) {
         // This row is completely empty
    } else {
         // The row has data
         for (int cellNumber = row.getFirstCellNum(); cellNumber <= row.getLastCellNum(); cellNumber++) {
             Cell cell = row.getCell(cellNumber);
             if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
                 // This cell is empty
             } else {
                 // This cell has data in it
             }
         }
    }
 }
于 2012-06-22T16:27:10.157 に答える
0

public String getCellData(String File_Name,int Sheet_Num, int Row_Num, int Col_Num) throws IOException{

    FileInputStream fileIn = new FileInputStream(System.getProperty("user.dir")+"\\"+File_Name+".xlsx");
    XSSFWorkbook workbook = new XSSFWorkbook(fileIn);
    XSSFSheet sheet=workbook.getSheetAt(Sheet_Num-1);
    XSSFRow row = sheet.getRow(Row_Num-1);
    XSSFCell cell= row.getCell(Col_Num-1);
    String celldata;
    if(cell!=null){
    celldata= cell.getStringCellValue();
    }
    else 
        celldata ="";
    fileIn.close();
    return celldata;

    }
于 2015-06-17T06:55:17.970 に答える
0
int column, rownumber = 0; // just for showing the example code

Row row = sheet1.getRow(rownumber); // just for showing the example code

if (row!= null)
    mycell = row.getCell(0);
if (mycell != null && mycell.getCellType() != Cell.CELL_TYPE_BLANK) {
    System.out.println(mycell.getStringCellValue());
}
else{
    System.out.println("whatever");  
}
于 2014-11-17T17:36:42.187 に答える