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) 

createExtractor方法的源码如下: 

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 OOXMLstream");
   }

 2.针对excel

   和word一样  poi中也有相似的方法,对此我们可采用poi 中解析excel的工厂类的方法,对于单独的版本解析方法在这里就不细说了

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

这样就可以解析不同版本的文档了,大家有兴趣的话可以看下源码的实现,它们中有对文档版本的判断  在poi-ooxml.jar中

 

写的比较匆忙,有时间再做补充,有说的不对的还请大牛指教。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值