我创建了一个解析器,使用带有java 9的apache poi读取excel电子表格,当我将它导出到jar文件并在我的计算机上运行时,我的程序运行正常。但是,当我尝试使用java 10运行程序时,我收到了一堆错误,并且根本没有读取该文件。
我正在运行最新版本的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();
}
答案 0 :(得分:0)
我认为你发现了一个bug,你必须要对它的状态进行一些挖掘。
答案 1 :(得分:0)
根据:https://poi.apache.org/faq.html “ 24。可以将Apache POI与Java 10或更高版本一起编译/使用吗? Java 10或更高版本尚未完全支持Apache POI。二进制格式(.xls,.doc,.ppt等)应该可以正常工作,但不幸的是,由于对XML的更改,读取基于XML的新格式(.xlsx,.docx,pptx等)会中断。 Java 10中的ZIP文件处理,有关详细信息和最新状态,请参见错误62187。”