獲取Excel文檔的版本(2003或者2007)

因工作需要解析excel文檔,用poi插件來進行處理,但是2003版本之前的和2007版本之後的解析方式不一樣,開始,我們是以後綴名來區分的(2003之前是xls,2007之後是xlsx),後來發現,如果一個2003文檔的後綴名被改成xlsx或反之,解析都會出現一些莫名其妙的問題,所以根據文檔內容來判斷版本是非常必要的。於是在網上找了很久終於找到一個切實可行的方法,代碼如下

public static void main(String[] args) {
	File f = new File("d://test2.xls");
	InputStream inp = null;
	try {
		inp = new FileInputStream(f);
	} catch (FileNotFoundException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	
	if(! inp.markSupported()) {
		inp = new PushbackInputStream(inp, 8);//封裝下輸入流,使得以下方法獲取輸入流的內容而不破壞輸入流內容
	}

	try {
		if(POIFSFileSystem.hasPOIFSHeader(inp)) {
			System.out.println("2003及以下");
		}
		if(POIXMLDocument.hasOOXMLHeader(inp)) {
			System.out.println("2007及以上");
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

其中POIFSFileSystem和POIXMLDocument用到了poi-3.5-FINAL-20090928.jar、poi-ooxml-3.5-FINAL-20090928.jar、poi-ooxml-schemas-3.9-20121203.jar、xmlbeans-2.3.0.jar等jar


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章