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"));