java中讀取excel文件時對不同的版本提供了不同的讀取方法,這就要求我們在讀取excel文件時獲取excel文件的版本信息從而通過不同的版本去使用不同的讀取方式,
在WorkbookFactory.create()函數中,做過對文件類型的判斷,所以我們如果想通過修改文件后綴去創建對應的Workbook對象是行不通的,我們看一下源碼是如何判
判斷笨笨類型從而創建對應的對象的:
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中的信息了