Android如何读写word文件 - 使用Apache POI 组件读写doc和docx文件

本文介绍了如何在Android项目中使用Apache POI组件读写doc和docx文件,包括下载、解压、导入Apache POI的步骤,以及通过HWPFDocument和XWPFDocument实现doc和docx文件的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文首发微信公众号:菜天Android

零、前言

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

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

进入主题!

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


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

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

官网HOWTOBUILD

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

文件类型 组件名 MavenId
doc HWPF poi-scratchpad
docx XWPF poi-ooxml

这里写图片描述

1.1 下载

进入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

这里写图片描述

1.2 解压

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

文件(夹)名 作用
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功能实现

这里写图片描述

1.3 导入

不熟悉怎么导入的同学可以看看Android Studio导入jar包教程

1.3.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不放我的项目也没出现异常,能少点是点)。

这里写图片描述

1.3.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 

2.1 DOC读

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

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


2.1.1 使用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()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值