Java 使用ApachePOI获取与复杂公式关联的excel文件中最后填写的精确行号

Java 使用ApachePOI获取与复杂公式关联的excel文件中最后填写的精确行号,java,excel,apache-poi,Java,Excel,Apache Poi,一个复杂的公式应用于一列,直到excel工作表的末尾。但当我使用sheet.getLastRowNum()检索最后一行号时 虽然excel工作表只有10行,但它返回的是工作表的最后一行。是否有办法在excel文件中获得准确的最后一行,即使 应用于excel工作表末尾的公式?来自 检索所需的公式,然后使用此代码。它将删除所有这些空行,然后您可以使用数据检索代码获取所需的数据 List yourlist = new ArrayList(); String value = null;

一个复杂的公式应用于一列,直到excel工作表的末尾。但当我使用sheet.getLastRowNum()检索最后一行号时 虽然excel工作表只有10行,但它返回的是工作表的最后一行。是否有办法在excel文件中获得准确的最后一行,即使 应用于excel工作表末尾的公式?

来自
检索所需的公式,然后使用此代码。它将删除所有这些空行,然后您可以使用数据检索代码获取所需的数据

List yourlist = new ArrayList();
        String value = null;
        FileInputStream inputStreams1 = null;
        inputStreams1 = new FileInputStream(FileNameWithPath);
        org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(inputStreams1);
        HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);
        Iterator<Row> iterator = sheet.iterator();

        boolean stop = false;
        boolean nonBlankRowFound;
        short c;
        HSSFRow lastRow = null;
        HSSFCell cell = null;
        HSSFRow FirsttRow = null;

        while (stop == false) {
            nonBlankRowFound = false;
            lastRow = (HSSFRow) sheet.getRow(sheet.getLastRowNum());
            for (c = lastRow.getFirstCellNum(); c <= lastRow.getLastCellNum(); c++) {
                cell = lastRow.getCell(c);
                if (cell != null && lastRow.getCell(c).getCellType() != HSSFCell.CELL_TYPE_BLANK) {
                    nonBlankRowFound = true;
                }
            }
            if (nonBlankRowFound == true) {
                stop = true;

                yourlist =  yourMethod(FileNameWithPath, sheet); //updated HSSFSheet object which will have 10 rows
                /*use this code to remove all those empty rows then use hsheet object. now use this hsheet object will
                 have only non empty rows(in your case 10 rows)*/

            } else {
                sheet.removeRow(lastRow);


            }
        }
List yourlist=new ArrayList();
字符串值=null;
FileInputStream inputStreams1=null;
inputStreams1=新文件InputStream(文件名与路径);
org.apache.poi.ss.usermodel.Workbook工作簿=WorkbookFactory.create(inputStreams1);
HSSFSheet sheet=(HSSFSheet)工作簿。getSheetAt(0);
迭代器迭代器=sheet.Iterator();
布尔停止=假;
布尔型非盲;
短c;
HSSFRow lastRow=null;
HSSFCell单元=空;
HSSFRow FirsttRow=null;
while(stop==false){
nonBlankRowFound=false;
lastRow=(HSSFRow)sheet.getRow(sheet.getLastRowNum());

对于(c=lastRow.getFirstCellNum();c感谢Sonal。它不适合我的情况,因为我的excel文件有10000行,只有前10行中的400列被填充。公式应用于工作表中的第50列,因此在本例中getLastRowNum()在我的例子中,返回10000并返回到第10行是一个性能问题。他们有其他适合此场景的解决方案吗?