读取Java中的excel文件 – 错误

我一直在试图编写一个简单的Java,其中用户可以select一个Excel文件,并让程序吐出文件的string/数字内容。

我已经到了我认为是一个可行的程序,但当我尝试它时,我得到了一个巨大的错误日志。 该计划如下:

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import javax.swing.JFileChooser; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WriteExcel { public static void main(String[] args) throws IOException { final JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.home"))); int result = fc.showOpenDialog(fc); File selectedFile = fc.getSelectedFile(); String filename = selectedFile.getPath(); System.out.println(filename); FileInputStream fis = new FileInputStream(filename); XSSFWorkbook wb = new XSSFWorkbook(fis); XSSFSheet sheet = wb.getSheetAt(0); FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator(); for(Row row : sheet){ for(Cell cell : row){ switch(fe.evaluateInCell(cell).getCellType()){ case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "\t\t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t\t"); break; } } } } } 

我收到的错误日志是:

 Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:456) at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:278) at WriteExcel.main(WriteExcel.java:28) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) ... 4 more Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions; at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50) at org.apache.poi.xssf.model.ThemesTable.<init>(ThemesTable.java:84) ... 9 more 

肯定比我预期的更多的错误消息。 任何人都可以指出我的错误(或分享如何更好地优化我的代码)? 谢谢!