poi操作office之word篇

来源:互联网 发布:spyder安装python包 编辑:程序博客网 时间:2024/06/04 00:45
 

读取 2003 版本(.doc)的word文件相对来说比较简单,只需要

1. poi-3.5-beta6-20090622.jar

2. poi-scratchpad-3.5-beta6-20090622.jar

两个 jar 包即可,

而2007 版本(.docx)就麻烦多,是要导入的 jar 包比较的多,有如下 7 个之多:

 1. openxml4j-bin-beta.jar


 2. poi-3.5-beta6-20090622.jar

 3. poi-ooxml-3.5-beta6-20090622.jar

 4 .dom4j-1.6.1.jar

 5. geronimo-stax-api_1.0_spec-1.0.jar

 6. ooxml-schemas-1.0.jar

 7. xmlbeans-2.3.0.jar


其中 4-7 是 poi-ooxml-3.5-beta6-20090622.jar 所依赖的 jar 包(在 poi-bin-3.5-beta6-20090622.tar.gz 中的 ooxml-lib 目录下可以找到)。

 

   // word 2003: 图片不会被读取

   InputStream is = new FileInputStream(new File("F:\\001.doc"));

   WordExtractor ex = new WordExtractor(is);

   String text2003 = ex.getText();

   System.out.println(text2003);
   
   // word 2007: 图片不会被读取

OPCPackage opcPackage = POIXMLDocument.openPackage("F:\\10.docx");

POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);

String text2007 = extractor.getText();

System.out.println(text2007);

 

处理word中的表格

try {

   FileInputStream in = new FileInputStream("F:\\10.doc");// 载入文档

   POIFSFileSystem pfs = new POIFSFileSystem(in);

   HWPFDocument hwpf = new HWPFDocument(pfs);

   Range range = hwpf.getRange();// 得到文档的读取范围

   TableIterator it = new TableIterator(range);

   // 迭代文档中的表格

   while (it.hasNext()) {

    Table tb = (Table) it.next();

    // 迭代行,默认从0开始

    for (int i = 0; i < tb.numRows(); i++) {

     TableRow tr = tb.getRow(i);

     // 迭代列,默认从0开始

     for (int j = 0; j < tr.numCells(); j++) {

      TableCell td = tr.getCell(j);// 取得单元格

      // 取得单元格的内容

      for (int k = 0; k < td.numParagraphs(); k++) {

       Paragraph para = td.getParagraph(k);

       String s = para.text().trim();

       System.out.println(s);

      } // end for

     } // end for

    } // end for

   } // end while

  } catch (Exception e) {

   e.printStackTrace();

  }


这是最近遇到的问题,利用POI读取文本的时候是可以的,注意2003和2007的读取方式不一样

还有一个问题需要证实:word中既有文本又含有表格的时候怎么才能正确解析?我再word中插入表格,可以正确解析,但是在文本和表格都有的时候,解析不出来。请看到的人能帮忙指点。。。