Java PDI: Come trovare una cella di Excel con un valore di stringa e ottenere la sua posizione (riga) per utilizzare quella posizione per trovare un’altra cella

Sto cercando una cella in un foglio di calcolo con la stringa ‘Totale’ e quindi utilizzare la riga in cui la cella è quello di trovare il valore totale in un’altra cella che è sempre la stessa cella/colonna (10 cell in 0 indice a base).

Ho il seguente codice, che non ha errori di sintassi), ma il findCell metodo non restituisce rowNum valore:

    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);
    }
}   
InformationsquelleAutor lv10 | 2012-01-29



2 Replies
  1. 20

    Questo metodo di correzione è la soluzione al tuo problema:

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

    Tenere a mente che il vostro colnr è ancora un valore fisso.

    • La ringrazio molto @msi. Il codice suggerito risolto il problema, ha funzionato perfettamente. Io sono relativamente nuovo per la programmazione, si può chiedere: 1. perché hai cambiato l’istruzione while e 2. Perché il ritorno del ciclo for è = 0. grazie ancora!
    • Quando si utilizza while loop stai assumendo che tutte le Celle a sinistra dal ‘totale-cella’ sono riempiti con una corda. Per esempio le cellule di simile a questo: | | 1| Totale| non riuscirà ad essere un po’, perché while romperà al valore di 1. Tornando 0 solo nel caso in cui non ‘totale-cella’ sarebbe trovato.
    • Per confrontare due stringhe si dovrebbe usare il metodo equals. == viene utilizzato per confrontare i tipi primitivi, non di oggetti. E il metodo getString() restituisce un Oggetto. Se volete saperne di più sulle Stringhe, leggere la Stringa di piscina e interno metodo. Questo è dove si possono trovare casi quando si confrontano utilizzando == è corretto. Ho anche usato il trim metodo solo perché gli input dell’utente, come per contenere ulteriori spazi alla fine della stringa.
    • grazie per aver dedicato del tempo per spiegare a me. Ho davvero apprezzato. Seguirò il tuo consiglio da ora in poi.
  2. 2

    Si dispone di un punto e virgola dopo il if dichiarazione che significa che il vostro if non funziona:

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

    Anche se questo non risolverà il tuo problema, penso che il tuo while dichiarazione potrebbe non essere appropriato per qui;

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

    Per quanto mi ricordo, ci sono altri tipi di Cellule in POI. Prova a mettere un punto di interruzione su queste linee e verificare se hanno corretto CellType.

    • Vi ringrazio molto. Il tuo suggerimento è giusto, l’istruzione while era qualcosa di sbagliato. L’ho tolto e cambiato per un’istruzione if, come suggerito di seguito da @msi.

Lascia un commento