Comment obtenir le nombre de lignes dans un fichier Excel en utilisant la bibliothèque POI?

les gars j'utilise actuellement la bibliothèque POI 3.9 pour travailler avec des fichiers excel. Je sais que de l' getLastRowNum() fonction, qui renvoie un certain nombre de lignes dans un fichier Excel.

Le seul problème est getLastRowNum() renvoie un nombre avec le décompte à partir de 0.

Donc, si un fichier Excel utilise les 3 premières lignes, getLastRowNum() retours 2. Si un fichier Excel n'a qu'une ligne, getLastRowNum() renvoie 0.

Le problème se produit lorsque le fichier Excel est entièrement vide. getLastRowNum() renvoie toujours 0, donc je ne peut pas déterminer si le fichier Excel a 1 ligne de données, ou si son vide.

Alors, comment puis-je détecter si un fichier Excel est vide ou pas ?

33
demandé sur Ahmad 2013-04-26 14:41:43

4 réponses

64
répondu macias 2013-04-26 11:28:56

Si vous faites un chèque

if
(getLastRowNum()<1){
 res="Sheet Cannot be empty";
return
}

cela vous permettra de vous assurer que vous avez au moins une ligne avec des données sauf en-tête. Ci-dessous mon programme qui fonctionne très bien. Fichier Excel a trois colonnes ie. ID, NAME, LASTNAME

XSSFWorkbook workbook = new XSSFWorkbook(inputstream);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Row header = sheet.getRow(0);
        int n = header.getLastCellNum();
        String header1 = header.getCell(0).getStringCellValue();
        String header2 = header.getCell(1).getStringCellValue();
        String header3 = header.getCell(2).getStringCellValue();
        if (header1.equals("ID") && header2.equals("NAME")
                && header3.equals("LASTNAME")) {
            if(sheet.getLastRowNum()<1){
                System.out.println("Sheet empty");
                         return;
            }   
                        iterate over sheet to get cell values
        }else{
                          SOP("invalid format");
                          return;
                          }
2
répondu JavaGeek 2013-09-24 10:41:24

Il y a deux Choses que vous pouvez faire

utiliser

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();

ou

int noOfColumns = sh.getRow(0).getLastCellNum();

Il y a une belle différence entre eux

  1. L'Option 1 donne le nombre de colonnes qui sont effectivement remplies de contenu(si la 2ème colonne de 10 colonnes n'est pas remplie, vous obtiendrez 9)

  2. L'Option 2 Vous donne juste l'index de la dernière colonne. Donc fait 'getLastCellNum()'

1
répondu Abhishek Singh 2015-08-28 10:36:02

Depuis Sheet.getPhysicalNumberOfRows() ne compte pas les lignes vides et les

int rowTotal = sheet.getLastRowNum();

if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
    rowTotal++;
}

Note: Ceci traitera une feuille de calcul avec une ligne vide comme n'ayant aucun mais pour la plupart des buts ceci est probablement correct.

1
répondu MatthijsM 2017-11-23 19:44:02