在Java 10中使用Apachi POI出错

时间:2018-05-14 23:55:44

标签: java apache-poi

我创建了一个解析器,使用带有java 9的apache poi读取excel电子表格,当我将它导出到jar文件并在我的计算机上运行时,我的程序运行正常。但是,当我尝试使用java 10运行程序时,我收到了一堆错误,并且根本没有读取该文件。

Error

Error Continued

Project Structure

我正在运行最新版本的apache poi,当我在java 9中运行应用程序时,我收到警告消息,但程序仍然运行没有任何问题。这些是我用来制作文件并将文件传递给open方法的方法。

 @FXML
public void handleFileButtonClick() throws Exception {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Please Select a SpreadSheet");
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)", "*.xlsx");
    fileChooser.getExtensionFilters().add(extFilter);
    File file = fileChooser.showOpenDialog(mainGridPane.getScene().getWindow());
    if (file != null) {
        open(file);
    } else {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("File Not Found");
        alert.setContentText("File was not found or cannot be read.");
        alert.showAndWait();
    }

}

  private void open(File file) throws Exception {
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    XSSFSheet spreadSheet = workbook.getSheetAt(0);
    Iterator<Row> rowIterator = spreadSheet.iterator();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();

    while (rowIterator.hasNext()) {
        row = (XSSFRow) rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        Job job = new Job();

        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            DataFormatter dataFormatter = new DataFormatter();
            String cellStringValue = dataFormatter.formatCellValue(cell);
            switch (cell.getColumnIndex()) {
                case 0:
                case 1:
                    break;
                case 2:
                    if (!cellStringValue.equals("")) {
                        String[] date = cellStringValue.split("/");
                        LocalDate newDate = LocalDate.of(2000 + Integer.parseInt(date[2]), Integer.parseInt(date[0]), Integer.parseInt(date[1]));
                        job.setStartDate(newDate);

                    }
                    break;
                case 3:
                    if (!cellStringValue.equals("")) {
                        String[] date2 = cellStringValue.split("/");
                        LocalDate newDate2 = LocalDate.of(2000 + Integer.parseInt(date2[2]), Integer.parseInt(date2[0]), Integer.parseInt(date2[1]));
                        job.setEndDate(newDate2);
                    }
                    break;
                case 4:
                    if (!cellStringValue.equals("")) {
                        job.setTotalDaysPaid(Integer.parseInt(cellStringValue));
                    }
                    break;
                case 5:
                    break;
                case 6:
                    if (!cellStringValue.equals("")) {
                        String[] date3 = cellStringValue.split("/");
                        LocalDate newDate3 = LocalDate.of(2000 + Integer.parseInt(date3[2]), Integer.parseInt(date3[0]), Integer.parseInt(date3[1]));
                        job.setNextYearStart(newDate3);
                    }

                    break;
                case 7:
                    if (!cellStringValue.equals("")) {
                        String[] date4 = cellStringValue.split("/");
                        LocalDate newDate4 = LocalDate.of(2000 + Integer.parseInt(date4[2]), Integer.parseInt(date4[0]), Integer.parseInt(date4[1]));
                        job.setNextYearEnd(newDate4);
                    }
                    break;
                default:
                    break;
            }
        }
        if (job.getStartDate() != null) {
            jobs.add(job);
        }
    }
    workbook.close();
}

2 个答案:

答案 0 :(得分:0)

我认为你发现了一个bug,你必须要对它的状态进行一些挖掘。

答案 1 :(得分:0)

根据:https://poi.apache.org/faq.html “ 24。可以将Apache POI与Jav​​a 10或更高版本一起编译/使用吗? Java 10或更高版本尚未完全支持Apache POI。二进制格式(.xls,.doc,.ppt等)应该可以正常工作,但不幸的是,由于对XML的更改,读取基于XML的新格式(.xlsx,.docx,pptx等)会中断。 Java 10中的ZIP文件处理,有关详细信息和最新状态,请参见错误62187。”