Java對不同版本的word,excel的解析

最近項目上用到文檔的解析,但是不同版本的文檔解析,它們所採用的接口方法不一樣,然而根據文件後綴判斷也不靠譜,後綴名稱有可能會更改。下面我就來給大家簡單的敘述下我的解決辦法:

1.針對word的解析

     一般的解析方法:

     03版本: InputStream is = new FileInputStream(new File("c://files//2003.doc"));

   WordExtractor ex = new WordExtractor(is);             

   String text2003 = ex.getText();

  07版本:OPCPackage opcPackage = POIXMLDocument.openPackage("c://files//2007.docx");    POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); 

        String text2007 = extractor.getText();

 但是對於判斷文檔版本號,根據不同版本調用不同方法,剛開始樓主也木有想到好的方法就翻了一下poi的源碼,發現可以這樣實  現:

FileInputStream fis = new FileInputStream(file);
POITextExtractor  pte=ExtractorFactory.createExtractor(fis);
if(pte!=null){
content=pte.getText();
}
  

  ExtractorFactory.createExtractor(fis) 這個方法源碼中對文檔版本號進行了判斷,所以我們就不用再擔心了

 源碼:public static POITextExtractor createExtractor(InputStream inp)
     throws IOException, InvalidFormatException, OpenXML4JException, XmlException
     {
                if (!inp.markSupported()) {
                        inp = new PushbackInputStream(inp, 8);
                    }


              if (NPOIFSFileSystem.hasPOIFSHeader(inp)) {
                    return createExtractor(new NPOIFSFileSystem(inp));
                 }
              if (POIXMLDocument.hasOOXMLHeader(inp)) {
                    return createExtractor(OPCPackage.open(inp));
                 }
           throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML         stream");
   }

 2.針對excel

   和word一樣  poi中也有相似的方法,對此我們可採用poi 中解析excel的工廠類的方法,對於單獨的版本解析方法在這裏就不了

   FileInputStream fis = new FileInputStream(file);
   Workbook wb = WorkbookFactory.create(fis);

這樣就可以解析不同版本的文檔了,大家有興趣的話可以看下源碼的實現,它們中有對文檔版本的判斷  在poi-ooxml.jar中


寫的比較匆忙,有時間再做補充,有說的不對的還請大牛指教。


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