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

操作步骤

步骤一:引用相关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'

97a92153f0db

类重复导入错误

错误引用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进行作业

步骤三:文件操作

97a92153f0db

操作类结构说明

获取主要信息

读取字段信息

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

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方法,并传入想要显示的宽和高。直接传入宽和高无法显示

效果图

97a92153f0db

测试过程

97a92153f0db

原始文档

97a92153f0db

输出文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go编译so win10_windows搭建Go语言交叉编译环境

我的环境&#xff1a;64位 windows 10go version go1.9.1 windows/amd641. 安装MinGW-w64我的系统是64位win10&#xff0c;早期版本的MinGW我安装后编译go的相关工具会一路报错&#xff0c;换成mingw-w64就可以顺利编译&#xff0c;下载地址&#xff1a;http://sourceforge.net…

android car bt模块,大谷蓝牙小车BT Car/Android Car手机控制 重力控制小车 安卓操控小车...

产品介绍&#xff1a;Android蓝牙遥控小车平台。是通过Android手机以蓝牙方式操控小车前进后退左转右转等&#xff0c;具有重力感应操控、触摸屏虚拟操控、虚拟摇杆三种控制模式。并且还具有呼吸灯、电源指示灯、蓝牙连接指示灯、速度等级指示灯等状态指示。小车自带锂电池及US…

html语言怎么设计出来的,(正式)网页设计语言HTML.ppt

(正式)网页设计语言HTML第二章网页设计语言HTML HTML基础知识 页面基本信息和布局 文本修饰 超文本链接 表格 图像 表单 多媒体 什么是HTML&#xff1f; HTML是Hyper Text Markup Language的英文缩写&#xff0c;翻译为“超文本标识语言”。它是一种用来制作超文本文档的简单标…

Dijkstra(迪杰斯特拉)算法总结

知识概览 Dijkstra算法适用于解决所有边权都是正数的最短路问题。Dijkstra算法分为朴素的Dijkstra算法和堆优化版的Dijkstra算法。朴素的Dijkstra算法时间复杂度为&#xff0c;适用于稠密图。堆优化版的Dijkstra算法时间复杂度为&#xff0c;适用于稀疏图。稠密图的边数m和是一…

二元二次方程例题_二元二次方程组-解法-例题

对“二一”型二元二次方程组中形如的方程组&#xff0c;可以根据一元二次方程根与系数的关系&#xff0c;把x、y看做一元二次方程z2-azb0的两个根&#xff0c;解这个方程&#xff0c;求得的z1和z2的值&#xff0c;就是x、y的值。当x1z1时&#xff0c;y1z2&#xff1b;当x2z2时&…

wxwidget编译安装_wxWidgets的安装编译、相关配置、问题分析处理

一、介绍部分 (win7 下的 GUI 效果图见 本篇文章的最后部分截图2张)wxWidgets是一个开源的跨平台的C构架库(framework)&#xff0c;它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK或Motif的Unix和MacOS。相当于大家熟悉的 VC。二、wxWidge…

馀承东发布鸿蒙,鸿蒙系统一无是处?鸿蒙有何优势?

华为方面官宣&#xff0c;将于6月2日晚8点&#xff0c;举行鸿蒙操作系统及华为全场景新品发布会&#xff0c;届时&#xff0c;大家期待已久的鸿蒙操作系统也将正式亮相。鸿蒙OS有别于传统OS&#xff0c;具有四大技术特性&#xff0c;这也是鸿蒙的四大优越之处。首先&#xff0c…

html 鼠标图标做成动画效果,怎么实现鼠标经过图标动画效果

学习前端的小伙伴们你知道鼠标经过图标动画效果如何实现吗?不知道的话跟着小编一起来学习标经过图标动画效果怎么实现把。今天就为大家分享一组时尚而简单的鼠标经过图标动画效果。构建HTML基本结构在本示例当中用到的HTML结构极其简单&#xff0c;在一个大的div容器中放了几个…

netty心跳过程中 发送消息失败_Netty 4.0 实现心跳检测和断线重连

arg0.pipeline().addLast("ping", new IdleStateHandler(25, 15, 10,TimeUnit.SECONDS));这个处理器&#xff0c;它的作用就是用来检测客户端的读取超时的&#xff0c;该类的第一个参数是指定读操作空闲秒数&#xff0c;第二个参数是指定写操作的空闲秒数&#xff0c…

校验html输入值为电话号码,js验证输入是否为手机号码或电话号码示例

代码如下:String.prototype.Trim function() {var m this.match(/^\s*(\S(\s\S)*)\s*$/);return (m null) ? "" : m[1];}String.prototype.isMobile function() {return (/^(?:13\d|15[89])-?\d{5}(\d{3}|\*{3})$/.test(this.Trim()));}String.prototype.isTe…

pcs层到mac层_mac层

ETSI TS 102 887-2-2013 电磁兼容与无线频谱事务(ERM).近程设备.智能测量无线接入协议.第2部分:数据链路层(MAC子层) 版本1.1.1ETSI TS 102 887-2-2013 电磁兼容与无线频谱事务(ERM).近程设备.智能测量无线接入协议.第2部分:数据链路层(MAC子层) 版本1.1.1ETSI TS 136 321-2013…

html表格中怎么将背景颜色虚化,如何在Photoshop中制作效果惊艳模糊背景!

把背景模糊一下&#xff0c;有时&#xff0c;效果会令人非常惊艳&#xff0c;但是&#xff0c;你知道如何在Photoshop中模糊背景吗&#xff1f; 在今天的教程中&#xff0c;我们将告诉大家&#xff0c;如何使背景模糊&#xff0c;而又不会使我们的主体周围出现光晕。在这个过程…

python 切片步长_python切片步长

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

axure html 360安装扩展,小编搞定win7系统360浏览器添加Axure扩展的设置方案

经常使用电脑的朋友会发现win7系统360浏览器添加Axure扩展的问题比较常见&#xff0c;如今就有用户反映在使用电脑的时候遇到win7系统360浏览器添加Axure扩展的情况不知怎么解决&#xff0c;于是我就给大家整理总结了win7系统360浏览器添加Axure扩展的具体处理方案&#xff0c;…

81章 老子1章到_老子道德经第1---81章原文及译文

老子简介老子名言道德经简介道德经全文及译文道德经下载道德经全文讲解道德经朗读(道篇)|(德篇)道德经译文精简版道德经逐句翻译道德经与风水学“道”的意思人生感悟老子故里老子的思想老子的智慧老子的故事第一章[原文]道可道也①&#xff0c;非恒道也②。名可名也③&#xff…

前锋html5费用,足坛转会费最高的5位前锋,1.05亿欧元仅第5,第1比C罗还高1.22亿...

原标题&#xff1a;足坛转会费最高的5位前锋&#xff0c;1.05亿欧元仅第5&#xff0c;第1比C罗还高1.22亿大家都知道&#xff0c;前锋对于比赛的胜负非常重要&#xff0c;再加上其关注度比其他位置高&#xff0c;商业价值比较高&#xff0c;所以通常来说&#xff0c;他们的转会…

python预测新航线的票价_浙江长龙航空有限公司四条新航线(线路+票价)

新航线开通时间&#xff1a;4月5日新开通航线线路&#xff1a;杭州—郑州、杭州—洛阳—成都、杭州—赤峰—哈尔滨、深圳—临沂—哈尔滨对应航班及时刻&#xff1a;1、杭州—郑州航线去程航班号为GJ8767&#xff0c;7&#xff1a;00从杭州起飞&#xff0c;8&#xff1a;15到达郑…

h3csnmp管理命令_如何配置H3C SNMP配置实例

配置Agent# 配置Agent的IP地址为1.1.1.1/24&#xff0c;并确保Agent与NMS之间路由可达。(配置步骤略)# 设置SNMP基本信息&#xff0c;包括版本、团体名。 system-view[Sysname] snmp-agent sys-info version v1 v2c[Sysname] snmp-agent community read public[Sysname] snmp-a…

学计算机高中要买电脑,大一新生,打着学习的“口号”要求买电脑,父母到底该不该答应?...

原标题&#xff1a;大一新生&#xff0c;打着学习的“口号”要求买电脑&#xff0c;父母到底该不该答应&#xff1f;马上就进入9月份了&#xff0c;全国各大高校也都陆续开学。对于刚刚考上大学的大一新生来说&#xff0c;学校的一切都是很新鲜的&#xff0c;而且他们也不用像在…

cropper初始化_jQuery.cropper中文API详解

cropper提供了大量的参数、方法和事件供图片的剪裁操作。安装可以通过Bower或NPM来安装该插件。bower install croppernpm install cropper使用方法使用该图片剪裁插件首先要引入必要的js和css文件。HTML结构可以将图片或canvas直接包裹到一个块级元素中。调用插件可以使用$.fn…