sheet.getLastRowNum()函数使用Apache POI 3.9提供无效计数

时间:2013-05-27 07:29:32

标签: java apache-poi

我正在使用Apache POI 3.9进行xls和xlsx文件处理。

根据逻辑,我想迭代每一行,并希望收集数据以便进一步处理。为此,我使用sheet.getLastRowNum()来检索xls表中的行数。

但是,如果记录数超过10,则sheet.getLastRowNum()似乎给出了错误的计数。

如果总行数为10,则工作正常。否则,它会将结果扣除一个。    即如果表格中有15行,则它将14作为最后一行编号。

任何人都可以建议我,如何解决这个问题?

以下是我用于收集数据的代码......

public static List<LinkedList<String>> populateExcelSheetContentWithHeader(Sheet sheet,int columnsCount,int rowsCount) throws Exception{
        Row row = null;

        List<LinkedList<String>> excelFileRecordsList = new LinkedList<LinkedList<String>>();                   
        int emptyColCount = 0;      

        String freeTextData = null;
        LinkedList<String> excelFileDataList =null;

        int actualRows = sheet.getLastRowNum();

        if (actualRows < rowsCount) {
            rowsCount = actualRows;
        }


        ///ITERATE OVER EACH ROW AND POPULATE THE DATA
        for(int index=0;index<rowsCount;index++){

            row = sheet.getRow(index);

            if(row!=null){
                emptyColCount = 0;
                excelFileDataList =new LinkedList<String>();

                for(int colIndex=0;colIndex<columnsCount;colIndex++){
                    freeTextData = "";

                    if(isEmptyCell(row.getCell(colIndex))){
                        emptyColCount++;
                    }else{
                        freeTextData = getCellValue(row.getCell(colIndex),false);
                    }

                    //ADD TEXT DETILS TO THE LIST
                    excelFileDataList.add(freeTextData);

                }

                //CHECK FOR END OF FILE
                if(emptyColCount != columnsCount){
                    excelFileRecordsList.add(excelFileDataList);
                }else{
                    break;
                }               
            }           

        }
        return excelFileRecordsList;
    }

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可能是从CSV转换,还是在xls中进行了任何修改(复制或粘贴)?当我像我提到的那样做一些改变时,我有同样的确切行为。为了解决它,我不得不再次复制原件。很抱歉没有提供真正的解决方案,我只是说发生了什么。 也许这有帮助