web-dev-qa-db-ja.com

Java POI:文字列値を持つExcelセルを見つけ、その位置(行)を取得してその位置を使用して別のセルを見つける方法

文字列 'Total'が含まれるスプレッドシートのセルを探し、そのセルが含まれる行を使用して、常に同じセル/列である別のセル(0の10番目のセル)の合計値を見つけますベースのインデックス)。

エラー(構文)がない次のコードがありますが、findCellメソッドはrowNum値を返しません。

    public static void main(String[] args) throws IOException{

        String fileName = "C:\\file-path\\report.xls";
        String cellContent = "Total";
        int rownr=0, colnr = 10;

        InputStream input = new FileInputStream(fileName);

        HSSFWorkbook wb = new HSSFWorkbook(input);
        HSSFSheet sheet = wb.getSheetAt(0);

        rownr = findRow(sheet, cellContent);

        output(sheet, rownr, colnr);

        finish();
    }

    private static void output(HSSFSheet sheet, int rownr, int colnr) {
        /*
         * This method displays the total value of the month
         */

        HSSFRow row = sheet.getRow(rownr);
        HSSFCell cell = row.getCell(colnr);

                System.out.println("Your total is: " + cell);           
    }

    private static int findRow(HSSFSheet sheet, String cellContent){
        /*
         *  This is the method to find the row number
         */

        int rowNum = 0; 

        for(Row row : sheet) {
            for(Cell cell : row) {

                while(cell.getCellType() == Cell.CELL_TYPE_STRING){

                    if(cell.getRichStringCellValue().getString () == cellContent);{

                            rowNum = row.getRowNum();
                            return rowNum;  
                    }
                }
            }
        }               
        return rowNum;
    }

    private static void finish() {

        System.exit(0);
    }
}   
9
lv10

このメソッド修正はあなたの問題の解決策です:

private static int findRow(HSSFSheet sheet, String cellContent) {
    for (Row row : sheet) {
        for (Cell cell : row) {
            if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) {
                    return row.getRowNum();  
                }
            }
        }
    }               
    return 0;
}

colnrはまだ固定値であることに注意してください。

19
msi

ifステートメントの後にセミコロンがあります。つまり、ifは機能しません。

if(cell.getRichStringCellValue().getString () == cellContent);{

これで問題が解決しない場合でも、whileステートメントはここでは適切ではない可能性があります。

while(cell.getCellType() == Cell.CELL_TYPE_STRING)

私が覚えている限り、POIには他のセルタイプがあります。これらの行にブレークポイントを設定して、セルタイプが正しいかどうかを確認してください。

2
Yasin Okumuş