获取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


猜你喜欢

转载自blog.csdn.net/u013456765/article/details/52594426