How to get row count in an Excel file using POI library?

前端 未结 7 2135
执念已碎
执念已碎 2020-12-08 09:37

Guys I\'m currently using the POI 3.9 library to work with excel files. I know of the getLastRowNum() function, which returns a number of rows in an Excel file.

相关标签:
7条回答
  • 2020-12-08 09:46

    Try Sheet.getPhysicalNumberOfRows()

    0 讨论(0)
  • 2020-12-08 09:51

    If you do a check

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

    This will make sure you have at least one row with data except header. Below is my program which works fine. Excel file has three columns 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;
                              }
    
    0 讨论(0)
  • 2020-12-08 09:54

    There are two Things you can do

    use

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

    or

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

    There is a fine difference between them

    1. Option 1 gives the no of columns which are actually filled with contents(If the 2nd column of 10 columns is not filled you will get 9)

    2. Option 2 just gives you the index of last column. Hence done 'getLastCellNum()'

    0 讨论(0)
  • 2020-12-08 09:58

    Since Sheet.getPhysicalNumberOfRows() does not count empty rows and Sheet.getLastRowNum() returns 0 both if there is one row or no rows, I use a combination of the two methods to accurately calculate the total number of rows.

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

    Note: This will treat a spreadsheet with one empty row as having none but for most purposes this is probably okay.

    0 讨论(0)
  • 2020-12-08 09:59

    To find last data row, in case you created table template in excel where it is filled partially or in between rows are empty. Logic:

    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 讨论(0)
  • 2020-12-08 10:02

    getLastRowNum() return index of last row.

    So if you wants to know total number of row = getLastRowNum() +1.

    I hope this will work.

    int rowTotal = sheet.getLastRowNum() +1;
    
    0 讨论(0)
提交回复
热议问题