web-dev-qa-db-fra.com

Comment obtenir le nombre de lignes dans un fichier Excel à l'aide de la bibliothèque de points d'intérêt?

J'utilise actuellement la bibliothèque POI 3.9 pour travailler avec des fichiers Excel. Je connais la fonction getLastRowNum() qui renvoie plusieurs lignes dans un fichier Excel.

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

Donc, si un fichier Excel utilise les 3 premières lignes, getLastRowNum() renvoie 2 ..__ Si un fichier Excel ne comporte qu'une seule ligne, getLastRowNum() renvoie 0.

Le problème se produit lorsque le fichier Excel est complètement vide. getLastRowNum() renvoie toujours 0, je ne peux donc pas déterminer si le fichier Excel contient une ligne de données ou s'il est vide.

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

35
Ahmad
69
macias

Si vous faites un chèque 

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

Cela garantira que vous avez au moins une ligne avec des données sauf l'en-tête. Ci-dessous, mon programme qui fonctionne bien. Fichier Excel a trois colonnes à savoir. ID, NOM, NOM

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
JavaGeek

Étant donné que Sheet.getPhysicalNumberOfRows() ne compte pas les lignes vides et que Sheet.getLastRowNum() renvoie 0 à la fois s'il n'y a qu'une ou plusieurs lignes, j'utilise une combinaison des deux méthodes pour calculer précisément le nombre total de lignes.

int rowTotal = sheet.getLastRowNum();

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

Remarque: Ceci traitera une feuille de calcul avec une ligne vide comme n'en contenant aucune, mais dans la plupart des cas, c'est probablement correct.

1
MatthijsM

Il y a deux choses que tu peux faire

utilisation

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 réellement remplies de contenu (si la 2e colonne de 10 colonnes n'est pas remplie, vous aurez 9)

  2. L'option 2 ne vous donne que l'index de la dernière colonne. Donc fait 'getLastCellNum()'

1
Abhishek Singh

Pour rechercher la dernière ligne de données, si vous avez créé un modèle de tableau dans Excel dans lequel il est rempli partiellement ou entre les lignes, il est vide

int count = 0;
int emptyrow=0;
int irow=0;
while (rowIterator.hasNext()) {
    row = (Row) rowIterator.next();
    if (count != 0 && !checkIfRowIsEmpty(row)) { }
    else{
        if(count!=0 && emptyrow==irow){
            emptyrow++;
        }else{
            emptyrow=0;
            irow=0;
        }
    }
    if(emptyrow>0){
        irow++;
    }
    if(emptyrow>3){
        break;
    }
    count++;
}
0
Singh Ss