Java POI提供的数据似乎在Office 2007+ XML中

我得到这个错误:

org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的数据似乎在Office 2007+ XML中。 您正在调用处理OLE2 Office文档的POI部分。 您需要调用POI的不同部分来处理这些数据(例如XSSF而不是HSSF)

我读扔Google,我发现我需要使用XSSF而不是HSSF,因为我的Excel文件是xlsx,但正如你在我的maven看到的,我已经使用xlsx。 请问我哪里错了?

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.13-beta1</version> </dependency> 

这个例外的代码是:

 POIFSFileSystem fs; fs = new POIFSFileSystem(new FileInputStream(getFilePath())); 

我的新代码

 public void getBColum() { try { OPCPackage fs; fs = new OPCPackage.open(new File(getFilePath())); XSSFWorkbook wb = new XSSFWorkbook(fs); XSSFSheet sheet = wb.getSheet("Master column name - Used Car"); XSSFRow row; CellReference cr = new CellReference("A1"); row = sheet.getRow(cr.getCol()); System.out.println(row.getCell(3)); } catch (FileNotFoundException e) { if (logger.isDebugEnabled()) { logger.debug("How can this error be possible? we should have already thrown an exception in the construction"); } } catch (IOException e) { logger.error(String.format("Exception in reading the file: %s", e.getMessage())); } } 

new oPCPackage.open有一个编译错误:

OPCPackage.open不能parsing为一个types

根据Apache POI快速指南 , POIFSFileSystem (或类似的, NPOIFSFileSystem )仅用于.xls(Excel版本到2003)文档。

.xlsx文档(Excel 2007+)的等效项目是OPCPackage

 OPCPackage pkg = OPCPackage.open(new File("file.xlsx")); 

您可以从OPCPackage创build一个OPCPackage

 XSSFWorkbook wb = new XSSFWorkbook(pkg); 

或者你可以直接创build它:

 XSSFWorkbook wb = new XSSFWorkbook(new File("file.xlsx")); 

通常最好使用File而不是InputStream来创build工作簿,以节省内存。

另外,如果你想要的代码不关心它是.xls还是.xlsx:

 // or "file.xlsx" Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));