操作步骤

步骤一:引用相关POI库

步骤二:创建POI中的word文件对象

步骤三:调用word文件对象的方法对文件进行操作

步骤一:引用相关的POI库

吐槽一下,这一步是最坑的

本人尝试了很多版本组合,最新的版本提示class重复引用。老的版本又有存在图片插入后损坏文件。本人把能用的放在后面

加载方式

效果

通过gradle引用3.14poi

使用javatest能够通过,但在编译apk时提示重复类

加载最新的5.1poi包

提示无法找到一些java类

加载3.8的poi包及java包

添加图片时,导致docx文件异常

通过gradle混合加载版本

能够使用

错误引用1-生成app提示类重复

implementation 'org.apache.poi:poi-ooxml:3.14'

implementation 'org.apache.poi:poi-excelant:3.14'

implementation 'org.apache.poi:poi-examples:3.14'

implementation 'org.apache.xmlbeans:xmlbeans:2.6.0'

类重复导入错误

错误引用2-添加图片时doc错误

目前采用直接加载jar包的方式,引用库加载文件如下:

implementation files('libs/poi-3.8-20120326.jar')

implementation files('libs/poi-ooxml-3.8-20120326.jar')

implementation files('libs/poi-ooxml-schemas-3.8-20120326.jar')

implementation files('libs/xmlbeans-2.3.0.jar')

implementation files('libs/commons-logging-1.1.jar')

implementation files('libs/dom4j-1.6.1.jar')

implementation files('libs/stax-api-1.0.1.jar')

正确引用-混合版本加载

implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'

implementation group: 'org.apache.xmlbeans', name: 'xmlbeans', version: '3.1.0'

implementation 'javax.xml.stream:stax-api:1.0'

implementation 'com.fasterxml:aalto-xml:1.2.2'

步骤二:创建POI对应的Document对象

首先区别你要加载的word后缀,是.doc还是.docx,因为这两个所创建的对象不一样,如果不对号入座则会报错

org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

文件后缀

创建对象

doc

HWPFDocument

docx

XWPFDocument

由于doc是2003年的word版本,此处暂时略过。主要使用docx进行作业

步骤三:文件操作

操作类结构说明

获取主要信息

读取字段信息

// 段落,一般只文字内容,图片表格等其他字符,会作为空字符

List paragraphs = doc.getParagraphs();

// 表格,整文档中的所有表格

List tables = doc.getTables();

// 图片,获取的都是byte[]

List allPictures = doc.getAllPictures();

// 页眉,只能获取不同内容的页眉

List headerList = doc.getHeaderList();

// 页脚,注意自动生成的编号不会被获取到,只能获取不同类型的页脚

List footerList = doc.getFooterList();

编辑文档内容(覆盖和添加)

注意使用POI的修改操作比较繁琐,建议直接准备一个空文件进行填充

编辑和修改都最好不要对源文件进行修改,而是在修改后通过一个输出流程,将修改后的文件输出

默认所有的操作,最后都有调用 doc.write(out);

(一) 文字修改

操作步骤

遍历所有的XWPFParagraph,并查找其中是否有自己需要修改的内容

遍历该XWPFParagraph中的XWPFRun,调用toString()方法查看是否为需要修改的内容

使用run.setText("修改内容", 0)方法修改

List paragraphs = doc.getParagraphs();

for (int i = 0; i < paragraphs.size(); i++) {

XWPFParagraph para = paragraphs.get(i);

String text = para.getText();

if (!TextUtils.isEmpty(text)) {

index = text.indexOf(GOAL);

if (index != -1) {

List runs = para.getRuns();

for (XWPFRun run : runs) {

if (run.toString().equals("GOAL")) {

run.setText("修改内容", 0);

}

}

}

}

}

注意:

一定要添加第二个参数0,否则会变成插入操作

需要查找的内容不要增加特殊符号,特殊符号会被识别为单独的XWPFRun对象

(二) 表格修改

操作步骤

确定需要处理的表格是第几个

根据确定需要编辑的数据在第几行,第几列后,通过XWPFTable->XWPFTableRow->CTRow->XWPFTableCell

在获取到XWPFTableCell后调用

//表格

List tables = doc.getTables();

XWPFTable table = tables.get(0);

table.getRow(0).getCell(1).setText("LJJ");

table.getRow(1).getCell(1).setText("29");

table.getRow(2).getCell(1).setText("地球");

注意:

若担心异常退出,可以做一些长度限制,通过table.getRows();,然后每一行的row.getCtRow()sizeOfTcArray();判断列数

(三) 图片插入

此处默认在最后插入图片,插入图片的方式是通过输入流的方式插入

XWPFRun run = doc.createParagraph().createRun();

FileInputStream picIn = new FileInputStream(new File(picPath));

run.addPicture(picIn, XWPFDocument.PICTURE_TYPE_PNG, "插入图片", Units.toEMU(256), Units.toEMU(256));

FileUtils.close(picIn);

注意:

插入图片打开word出现错误,则需要升级poi版本。目前可以使用的我已经上传在最上面的下载地址了

插入图片的宽和高,一定要使用Units.toEMU方法,并传入想要显示的宽和高。直接传入宽和高无法显示

效果图

测试过程

原始文档

输出文档

android 控制word,Android使用POI进行Word操作(一)相关推荐

  1. java如何解析word大纲_Java POI 解析word文档

    实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...

  2. java读取word带格式化,poi读取word简历(伪word格式的doc文件 )提取文本内容报错...

    常规思路(利用poi对word进行解析) word 2003: 图片不会被读取 InputStream is = new FileInputStream(new File("D:\\word ...

  3. java用poi导出word,Java使用POI导出Word文档的操作教程,poiword

    Java使用POI导出Word文档的操作教程,poiword 一.主要pom依赖 org.apache.poi poi-ooxml 3.16 二.需要导出word模板 三.相关导出代码 package ...

  4. android 控制音乐,Android音乐控制接口RemoteController使用

    Android RemoteController使用 原文链接 RemoteController在API 19 引进,用来给音乐控制提供标准接口.长久以来,音乐播放在Android平台没有一个标准的接 ...

  5. JAVA根据word模版使用poi导出word文档,包含图片、文字

    模版word文件,内容和表格都已处理,保留了字体和样式,图片可以指定大小,docx类型的模版字段有问题的话,整个字段复制进去即可,不要手敲${} 生成的word文件 /*** word工具类** @a ...

  6. java poi 读取word图片,Java POI导入word, 带图片

    1.导入文件示例,word中简历表格模板 2.代码示例分两部分,一部分读取图片/** * 导入word(基本信息,word格式) * @param staffId * @param baseInfoF ...

  7. android控制wifi,Android控制wifi开关

    认识下Wifi的几种状态: 1. wifiManager.WIFI_STATE_DISABLED :  (1)  关闭 2. wifiManager..WIFI_STATE_ENABLED :  (3 ...

  8. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  9. poi解析word文档(解析表格,emf,wmf,svg转jpg图片)

    POI解析word文档 poi解析word的表格:   提前先准备需要的jar包:   <!-- poi --><dependency><groupId>org.a ...

最新文章

  1. sql语句的简单记录
  2. 模组使用之天线阻抗匹配、匹配过程、天线选型注意、RF走线Layout建议
  3. 组合数据类型练习,英文词频统计实例9-21
  4. React中构造函数、reader和函数的调用次数和时机测试
  5. c语言字符常量和字符串常量_C语言中的字符常量
  6. php gzip 关闭,Thinkphp 关闭Gzip header输出问题
  7. UVa 11992 (线段树 区间修改) Fast Matrix Operations
  8. SAP License:CO-FI实时集成
  9. iOS基础 - UIScrollView
  10. obs多推流地址_如何使用OBS推流直播线上广交会(图文详解) | 文末福利
  11. 通讯录系统图形化界面(C++,Qt5.12)(Visual Studio2019,QtCreator)(初学)
  12. thinkphp 模板写php,thinkphp 模版继承的使用
  13. Redirected Walking
  14. 达索Catia许可证优化管理方案
  15. Qt编写安防视频监控系统61-子模块5设备控制
  16. win10 无法修改时间,自动设置时间灰色
  17. 为macbook双系统的windows装驱动
  18. 基于SQLSERVER--数据库表的修复
  19. PaddlePaddle李宏毅机器学习特训营笔记——机器学习概述
  20. 编程之美 - 烙饼问题

热门文章

  1. 什么是Docker?看这一篇文章就够了
  2. 三包围结构的字是什么样的_一年级语文重点(字、字母、字词、词语、句子)知识点汇总!...
  3. java timer schedule_java怎么再次设置Timer的schedule???
  4. 查看mysql服务的可视化_Prometheus 监控Mysql服务器及Grafana可视化
  5. Directory /opt/jfrog/artifactory/var has bad permissions for user id 1030
  6. MySQL8.0.26 开启bin_log日志 linux
  7. Springboot2.x +JPA 集成 Apache ShardingSphere 分表+读写分离
  8. linux shell读取配置文件中的内容
  9. CAS项目部署和基础操作
  10. SpringBoot集成Flowable_Jsite办理任务菜单报403