使用POI 读取word 文档(word 2003和2007)

最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97、2003、2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 97 基本上已经退出市场,几乎没有人用这个版本了, 所以在我们的系统中只考虑 2003 版本和 2007 版本的,因为我们只要求能够读取 word 中的文字内容即可,其中的文字样式、图片等信息可以忽略,也不用直接操作 word 文件, 所以我们选择 用 apache 的 POI 进行读取。

读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi-3.5-beta6-20090622.jar 和 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 目录下可以找到)。

编写代码之前我们得先下载所需要的 jar 包, 我们只需下载 poi-bin-3.5-beta6-20090622.tar.gz 和openxml4j-bin-beta.jar 即可,因为所需要的其他 jar 包都能在 poi-bin-3.5-beta6-20090622.tar.gz 中找到, 下面是下载地址: poi-bin-3.5-beta6-20090622.tar.gz:http://apache.etoak.com/poi/dev/bin/poi-bin-3.5-beta6-20090622.tar.gz openxml4j-bin-beta.jar:http://mirror.optus.net/sourceforge/o/op/openxml4j/openxml4j-bin-beta.jar       下方是读取 word 文件的 Java 代码,值得注意的是: POI 在读取 word 文件的时候不会读取 word 文件中的图片信息, 还有就是对于 2007 版的 word(.docx), 如果 word 文件中有表格,所有表格中的数据都会在读取出来的字符串的最后。

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.InputStream;
  4. import org.apache.poi.POIXMLDocument;
  5. import org.apache.poi.POIXMLTextExtractor;
  6. import org.apache.poi.hwpf.extractor.WordExtractor;
  7. import org.apache.poi.openxml4j.opc.OPCPackage;
  8. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
  9. /**
  10. * POI 读取 word 2003 和 word 2007 中文字内容的测试类<br />
  11. * @createDate 2009-07-25
  12. * @author Carl He
  13. */
  14. public class Test {
  15. public static void main(String[] args) {
  16. try {
  17. //word 2003: 图片不会被读取
  18. InputStream is = new FileInputStream(new File("c://files//2003.doc"));
  19. WordExtractor ex = new WordExtractor(is);
  20. String text2003 = ex.getText();
  21. System.out.println(text2003);
  22. //word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
  23. OPCPackage opcPackage = POIXMLDocument.openPackage("c://files//2007.docx");
  24. POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
  25. String text2007 = extractor.getText();
  26. System.out.println(text2007);
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

如果想下载完整的示例代码,可以到这里下载,这个 rar 包中有 POI 读取word 2003 和 word 2007 所需要的全部 jar 包 和 word 2003、word 2007 示例文件。

========仅供分享==========

转载于:https://www.cnblogs.com/xm1-ybtk/p/4966521.html

使用POI读取word文档相关推荐

  1. 关于poi读取word文档修改后输出乱码问题 poi word 乱码

    java用poi读取word文档的确很容易.不过不同版本之间差别还是挺大的.目前只是试出了poi-3.8-beta4这个版本编辑word内容后输出不是乱码.最新官方版本都是乱码,不知道为什么.贴出代码 ...

  2. java获取内容为空_Java使用POI读取Word文档时如果文档内容为空时出现异常

    异常如下: org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long) at org.apache ...

  3. java poi 读取word_Java poi读取word文档(本篇只能读取text内容)

    注意:word存在版本问题  分别为2003版本和2007版本(两个版本的操作是不一样的,已解决不同版本读取问题) 1.既然是使用poi  当然是先看需要什么包咯 maven导入依赖(三个依赖都是必须 ...

  4. php识别word语言,PHP读取word文档

    在PHP中读取和写入WORD文档的代码 php // 建立一个指向新COM组件的索引 $word = new COM("word.application") or die(&quo ...

  5. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  6. poi操作word文档总结

    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...

  7. php或js获取word内容,js能读取word js读取word文档

    如何使用jquery读取word文档 text = ',本地文件,文本内容到PDF的转换,其最终还是调用wkhtmltopdf命令.add_table(rows=1,cols=1,以及使用freema ...

  8. java读取带格式word文档_Java读取word文档解决方案

    java读取word文档时,虽然网上介绍了很多插件poi.java2Word.jacob.itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用):java ...

  9. POI生成word文档,包括标题,段落,表格,统计图(非图片格式)

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...

最新文章

  1. Welcome to Linux From Scratch!
  2. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )
  3. zencart分类页每页显示产品数量自定义选择的方法
  4. Android Studio 约束布局[ConstraintLayout]
  5. python日志模块的封装
  6. 使用 ConfigMap 挂载配置文件
  7. C#图片按指定大小分割
  8. 【资源】斯坦福李飞飞高徒Johnson博士论文: 组成式计算机视觉智能(附195页PDF)
  9. 百度元宇宙产品“希壤”将于12月27日发布
  10. 腾讯获准在中国销售Switch游戏机 任天堂股价应声飙升逾14%
  11. torch.Tensor和torch.tensor有什么区别?
  12. javascript 自动完成下拉框
  13. java gb28181网关_国标GB28181协议对接网关
  14. PHP动态网站开发期末试卷,《PHP动态网站开发实例教程》课程考核方案
  15. Java 桌球小游戏
  16. Git - 版本穿梭(时光穿梭机)
  17. Hydration 是什么?
  18. [Unity3D]-协程的介绍和使用
  19. IK-analyzer添加搜狗词库
  20. 为什么需要虚继承,虚继承的实现原理

热门文章

  1. Program Size: data=9.0 xdata=0 code=47
  2. 编译安装时的--prefix参数的使用方法,很实用,mark一下
  3. SCVMM2012 SP1 之P2V转换
  4. python开发环境的安装与配置_Python开发环境的安装配置
  5. 电脑要什么配置好_收藏好!设计专业学生电脑配置推荐
  6. id,rowid,rownum 区别
  7. 雪花怎么画_平安夜怎么过?画个圣诞妆,你是最迷人嘎,你知道吗
  8. 敏捷开发_敏捷开发之看板
  9. python可以做科学计算吗_python能做什么科学计算
  10. html里fill怎么自定义,HTML canvas fill()用法及代码示例