Android使用ApachePOI组件读写Worddoc和docx文件 您所在的位置:网站首页 用手机怎么编辑docx文档 Android使用ApachePOI组件读写Worddoc和docx文件

Android使用ApachePOI组件读写Worddoc和docx文件

2024-07-14 11:24| 来源: 网络整理| 查看: 265

本文章已同步至微信公众号:是天哥哥啊

最近在项目中要生成Word的doc和docx文件,一番百度google之后,发现通过java语言实现的主流是Apache的POI组件。除了POI,这里还有另一种实现,不过我没有去研究,有兴趣的同学可以研究研究。

关于POI可以访问Apache POI的官网获取详细的信息。

进入主题!

由于项目中只是用到了doc和docx的组件,下面也只是介绍这两个组件的使用

一、在Android Studio中如何用POI组件

从POI官网上看,貌似暂并不支持IntelliJ IDE,如下图,所以这里我们采用直接下载jar包并导入项目的方式。

官网how to build

通过官网 ->Overview->Components,可以看到 d和docx文件分别对应着组件HWPF和XWPF,而HWPF和XWPF则对应着poi-scratchpad和poi-ooxml

文件类型 组件名 MavenId doc HWPF poi-scratchpad docx XWPF poi-ooxml Components Map 下载

进入Apache下载页面,选择最新版下载,如下。选择The latest beta release is Apache POI 3.16-beta2会跳转到poi-bin-3.16-beta2-20170202.tar.gz,然后点击poi-bin-3.16-beta2-20170202.tar.gz,选择镜像后即可成功下载。

注 linux系统选择.tar.gz windows系统选择.zip

POI下载页面 解压

将下载后的压缩包解压,会得到以下文件。

文件(夹)名 作用 docs 文档(包括API文档和如何使用及版本信息) lib doc功能实现依赖的包 ooxml-lib docx功能实现依赖的包 LICENSE NOTICE poi-3.16-beta2.jar The prerequisite poi-scratchpad-3.16-beta2.jar poi-examples-3.16-beta2.jar 不明确 poi-excelant-3.16-beta2.jar excel功能实现 poi-ooxml-3.16-beta2.jar docx功能实现 poi-ooxml-schemas-3.16-beta2.jar The prerequisite of poi-ooxml-3.16-beta2.jar poi-scratchpad-3.16-beta2.jar doc功能实现 解压后的poi包 导入

不熟悉怎么导入的同学可以看看Android Studio导入jar包教程 1、doc 对于doc文件,需要将lib文件夹下jar包,poi-3.16-beta2.jar,poi-scratchpad-3.16-beta2.jar放入android项目libs目录下(lib文件夹下的junit-4.12.jar和log4j-1.2.17.jar不放我的项目也没出现异常,能少点是点)。

项目中的libs

2、docx 对于docx,需要导入lib文件夹下jar包,poi-3.16-beta2.jar,poi-ooxml-3.16-beta2.jar,poi-ooxml-schemas-3.16-beta2.jar和ooxml-lib下的包,由于一直我这一直出现Warning:Ingoring InnerClasses attribute for an anonymous inner class的错误,同时由于doc基本满足我的需求以及导入这么多jar导致apk体积增大,就没有去实现。 有兴趣的同学可以研究研究。

二、实现doc文件的读写

Apache POI中的HWPF模块是专门用来读取和生成doc格式的文件。在HWPF中,我们使用HWPFDocument来表示一个word doc文档。在看代码之前,有必要了解HWPFDocument中的几个概念:

名称 含义 Range 表示一个范围,这个范围可以是整个文档,也可以是里面的某个小节(Section),也可以是段落(Paragraph),还可以是拥有功能属性的一段文本(CharacterRun) Section word文档的一个小节,一个word文档可以由多个小节构成。 Paragraph word文档的一个段落,一个小节可以由多个段落构成。 CharacterRun 具有相同属性的一段文本,一个段落可以由多个CharacterRun组成。 Table 一个表格。 TableRow 表格对应的行 TableCell 表格对应的单元格

注意 : Section、Paragraph、CharacterRun和Table都继承自Range。

读写前注意:Apache POI 提供的HWPFDocument类只能读写规范的.doc文件,也就是说假如你使用修改 后缀名 的方式生成doc文件或者直接以命名的方式创建,将会出现错误“Your file appears not to be a valid OLE2 document” Invalid header signature; read 0x7267617266202E31, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document DOC读

读doc文件有两种方式 (a)通过WordExtractor读文件 (b)通过HWPFDocument读文件

在日常应用中,我们从word文件里面读取信息的情况非常少见,更多的还是把内容写入到word文件中。使用POI从word doc文件读取数据时主要有两种方式:通过WordExtractor读和通过HWPFDocument读。在WordExtractor内部进行信息读取时还是通过HWPFDocument来获取的。

使用WordExtractor读

在使用WordExtractor读文件时我们只能读到文件的文本内容和基于文档的一些属性,至于文档内容的属性等是无法读到的。如果要读到文档内容的属性则需要使用HWPFDocument来读取了。下面是使用WordExtractor读取文件的一个示例:

//通过WordExtractor读文件 public class WordExtractorTest { private final String PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "test.doc"); private static final String TAG = "WordExtractorTest"; private void log(Object o) { Log.d(TAG, String.valueOf(o)); } public void testReadByExtractor() throws Exception { InputStream is = new FileInputStream(PATH); WordExtractor extractor = new WordExtractor(is); //输出word文档所有的文本 log(extractor.getText()); log(extractor.getTextFromPieces()); //输出页眉的内容 log("页眉:" + extractor.getHeaderText()); //输出页脚的内容 log("页脚:" + extractor.getFooterText()); //输出当前word文档的元数据信息,包括作者、文档的修改时间等。 log(extractor.getMetadataTextExtractor().getText()); //获取各个段落的文本 String paraTexts[] = extractor.getParagraphText(); for (int i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有