it-swarm.com.de

Wie kann ich die Zeilenanzahl in einer Excel-Datei mithilfe der POI-Bibliothek ermitteln?

Jungs Ich verwende derzeit die POI 3.9-Bibliothek, um mit Excel-Dateien zu arbeiten. Ich kenne die Funktion getLastRowNum(), die eine Anzahl von Zeilen in einer Excel-Datei zurückgibt.

Das einzige Problem ist, dass getLastRowNum() eine Zahl mit der Zählung ab 0 zurückgibt.

Wenn also eine Excel-Datei die ersten drei Zeilen verwendet, gibt getLastRowNum() 2 zurück. Wenn eine Excel-Datei nur eine Zeile hat, gibt getLastRowNum() 0 zurück.

Das Problem tritt auf, wenn die Excel-Datei vollständig leer ist. getLastRowNum() gibt immer noch 0 zurück, daher kann ich nicht feststellen, ob die Excel-Datei 1 Datenzeile enthält oder ob sie leer ist.

Wie kann ich also feststellen, ob eine Excel-Datei leer ist oder nicht?

35
Ahmad
69
macias

Wenn Sie einen Check machen 

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

Dadurch wird sichergestellt, dass Sie mindestens eine Zeile mit Daten außer Header haben. Unten ist mein Programm, das gut funktioniert. Die Excel-Datei hat drei Spalten. 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
JavaGeek

Da Sheet.getPhysicalNumberOfRows() keine leeren Zeilen zählt und Sheet.getLastRowNum() sowohl 0 als auch keine Zeilen zurückgibt, verwende ich eine Kombination der beiden Methoden, um die Gesamtzahl der Zeilen genau zu berechnen.

int rowTotal = sheet.getLastRowNum();

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

Hinweis: Dies wird eine Tabelle mit einer leeren Zeile so behandeln, dass sie keine enthält. Für die meisten Zwecke ist dies wahrscheinlich in Ordnung.

1
MatthijsM

Es gibt zwei Möglichkeiten, die Sie tun können

benutzen

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

oder

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

Es gibt einen feinen Unterschied zwischen ihnen

  1. Option 1 gibt die Anzahl der Spalten an, die tatsächlich mit Inhalt gefüllt sind (Wenn die zweite Spalte mit 10 Spalten nicht gefüllt ist, erhalten Sie 9).

  2. Option 2 gibt Ihnen nur den Index der letzten Spalte. Also getan 'getLastCellNum()'

1
Abhishek Singh

Um die letzte Datenzeile zu finden, falls Sie eine Tabellenvorlage in Excel erstellt haben, in der sie teilweise gefüllt ist oder die Zeilen zwischen den Zeilen leer sind . Logik:

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