0

我正在开发一个基于 Eclipse 的 Java 应用程序。但我无法捕捉到异常。我想同时使用HSSF和读取一个excel文件(.xlsx) XSSF。但是HSSF可以正常工作,否则 XSSF 不能。这是我的代码。在wb = new XSSFWorkbook(pkg);语句之后,程序计数转到 finally 语句。提前致谢。

 try {
        if (FileFormat == FILE_FORMAT_XLS) {
            fs = new POIFSFileSystem(new FileInputStream(szFileName));
            wb = new HSSFWorkbook(fs);
        }
        // This block does not work properly.
        else if (FileFormat == FILE_FORMAT_XLSX) {
            file = new File(szFileName);
            if (file.exists() == false || file.isFile() == false || file.canRead() == false) {
                throw new IOException(szFileName);
            }

            pkg = OPCPackage.open(file);
            wb = new XSSFWorkbook(pkg); // **<- Here is the problem.**
        }

        if (wb != null) {
            evaluator = wb.getCreationHelper().createFormulaEvaluator();
            sheetNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetNum; i++) {
                for (Row row : wb.getSheetAt(i)) {
                    person ps = new person();
                    if (getPerson(row, ps) == true) {
                        list.add((Object) ps);
                        log.addLog(list.size() + " " + ps.getName() + ", " + ps.getHanName() + ", " + ps.getEnName() + ", " + ps.getBirthDay() + ", " + ps.getCellPhone() + ", " + ps.getID() + ", " + ps.getAddress());
                    } else {
                        log.addLog("total count = " + list.size());
                        ps = null;
                        break;
                    }
                }
            }
        } else {
            log.addLog("can not open workbook");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    finally {
        if (wb != null) {
            wb = null;
        }
    }
4

1 回答 1

0

程序是否在finally没有捕获异常的情况下运行?要么 wb 对象为空,要么会有异常堆栈跟踪。

wb 对象也必须是适当的类型。HSSF 或 XSSF。尝试像这样实例化 xssfworkbook

XSSFWorkbook 工作簿 = new XSSFWorkbook(szFileName);

于 2016-01-22T18:37:28.697 回答