java中读取excel文件时对不同的版本提供了不同的读取方法,这就要求我们在读取excel文件时获取excel文件的版本信息从而通过不同的版本去使用不同的读取方式,
在WorkbookFactory.create()函数中,做过对文件类型的判断,所以我们如果想通过修改文件后缀去创建对应的Workbook对象是行不通的,我们看一下源码是如何判
判断文件类型从而创建对应的对象的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public static Workbook create(InputStream inp) throws IOException, InvalidFormatException { // If clearly doesn't do mark/reset, wrap up if (! inp.markSupported()) { inp = new PushbackInputStream(inp, 8 ); } if (POIFSFileSystem.hasPOIFSHeader(inp)) { return new HSSFWorkbook(inp); } if (POIXMLDocument.hasOOXMLHeader(inp)) { return new XSSFWorkbook(OPCPackage.open(inp)); } throw new IllegalArgumentException( "Your InputStream was neither an OLE2 stream, nor an OOXML stream" ); } |
由此我们便可以通过判断不同的文件版本去使用对应的对象读取excel中的信息了