web-dev-qa-db-fra.com

Java POI: comment trouver une cellule Excel avec une valeur de chaîne et obtenir sa position (ligne) pour utiliser cette position pour trouver une autre cellule

Je recherche une cellule dans une feuille de calcul contenant la chaîne "Total", puis j'utilise la ligne dans laquelle se trouve cette cellule pour trouver la valeur totale dans une autre cellule qui est toujours la même cellule/colonne (la 10e cellule dans un 0 index basé).

J'ai le code suivant, qui n'a aucune erreur (syntaxe), mais la méthode findCell ne renvoie pas de valeur 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

Ce correctif de méthode est la solution à votre problème:

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;
}

Gardez à l'esprit que votre colnr est toujours une valeur fixe.

19
msi

Vous avez un point-virgule après votre instruction if ce qui signifie que votre if ne fonctionnera pas:

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

Même si cela ne résout pas votre problème, je pense que votre instruction while peut ne pas être appropriée ici;

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

Pour autant que je me souvienne, il existe d'autres types de cellules dans POI. Essayez de mettre un point d'arrêt sur ces lignes et vérifiez-les si elles ont le bon CellType.

2
Yasin Okumuş