Apache poi空白单元问题

时间:2012-06-27 17:03:03

标签: java apache-poi

我的解释有点复杂,所以我很抱歉,但这是我在部署之前的最后一个错误。

我的程序迭代到excel文档的最后一行并重新计算,直到找到“”或“null”之外的其他内容,因为我需要抓取列的最后6个数据点,并且这样做会跳过不可见的垃圾数据和空白单元格。

使用一些较旧的Excel工作表(在excel 2003中创建,或者可能更早),我的程序可以找到最后一个单元格(我在运行时打印坐标,所以我知道它的发现)但声称细胞是空白的。当我打开excel文档时,包含数据的最后一个单元格确实不是空白。使用较新的excel文档(xlsx或xls,只要是为office 2010制作),没有错误,每次都有效,所以我不确定我的问题是什么。我不能抓回一个空单元格,因为如果它不能读取最后6个单元格中的所有六个单元,那么从程序中运行是没有意义的,所以实际上没有捕获动作。我该怎么办?

我搜索最后一行的代码在这里:

    while (cell == null || cell.toString() == "") {
        row = insheet.getRow(rownum);
        cell = row.getCell(column);
        System.out.println("skipping rownum: " + rownum);
        rownum--;
    }
    System.out.println("    Last cell is B" + (rownum+1) +  ": " + cell.toString());
    rownum--; //last cell is actually blank, go back up one more.

我从底部向上抓住最后6个单元格:

    //iterate back up 6 times and store the values
    while (ctr > 0) {
        String str = "";
        //update cell location
                    row = insheet.getRow(rownum);
        cell = row.getCell(column);
        //find the contents of the cell
        /*
         * getCellType(), order:
         * Numeric Cell Type (0)
         * String Cell type (1)
         * Formula Cell type (2)
         * Blank Cell type (3)
         * Boolean Cell type (4)
         * Error Cell type (5)
         */ 

        if (cell.getCellType() == 1) {
            //System.out.println("Cell is a string."); //for testing
            str = cell.toString();
            System.out.println(str);
            num = Double.parseDouble(str);  //possible error on this line.
        } else if (cell.getCellType() == 0) {
            //System.out.println("Cell is a numerical value."); //for testing
            num = cell.getNumericCellValue();
        } else {
            System.err.println("Error, sheet needs cleaned.");
            System.exit(0);
        }
        //update the contents of the temporary holder
        latency.add(num);
        //increase the number of runs
        ctr--;
        //move up one cell
        rownum--;
    }

我得到的实际错误是在线:

 num = Double.parseDouble(str);  //possible error on this line.

但这只是因为它的解析是“”因为该单元格由于某种原因被认为是空白的。这也告诉我检查器正在考虑它的单元格类型1(字符串)。

另一件需要考虑的事情是,我有时会收到运行时错误,说明该文件不在ooxml或olee中。此错误并不总是与空白单元格问题同时发生,而是来自excel文件的同一时代。

0 个答案:

没有答案