3

我正在使用 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;
    }

任何建议表示赞赏。

4

1 回答 1

0

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

于 2016-03-17T13:54:16.153 回答