WPS Office JS宏实现批量处理Word中的标题和正文的样式

        该篇讲解下word文档中的标题和正文批量修改样式,如下图:

        前面一篇已讲解了WPS Office宏编辑器操作方法,这里不细讲了,如有不清楚可以查看该篇:https://blog.csdn.net/jiciqiang/article/details/134653657?spm=1001.2014.3001.5501文章浏览阅读363次。WPS Office JS宏,实现Word表格样式批量修改。 由于本职工作原因,经常会用到office办公软件,经常很多内容审批后,需要统一修改内容或样式,如果Word文档中有上百页或上千页,则一个一个修改太麻烦了。在接触到WPSJS宏后,发现工作效率大大提升;如果你会前端开发,有JS基础上手会非常快;如果有VBA基础,就更得心应手了,因为对象和函数定义,基础是沿用office的VBA。其他不多说了,先和大家分享下如果统一修改表格样式。https://blog.csdn.net/jiciqiang/article/details/134653657?spm=1001.2014.3001.5501

一、修改标题

1.1 Paragraphs 对象

        在编写代码前,咱们先了解下Paragraphs对象的属性和方法。

方法:

名称说明
1Add返回一个 Paragraph 对象,该对象代表添加到文档中的新的空白段落。
2Indent为一个或多个段落增加一个级别的缩进。
3IndentFirstLineCharWidth将一个或多个段落的首行缩进指定的字符数。

属性:

名称说明
1AddSpaceBetweenFarEastAndAlpha如果 WPS 将自动在指定段落的日文和拉丁文文字之间添加空格,则该属性值为 True。如果仅对于某些指定段落将该属性设置为 True,则该属性会返回 wdUndefined。Long 类型,可读写。
2AddSpaceBetweenFarEastAndDigit如果 WPS 将自动在指定段落的日文文字和数字之间添加空格,则该属性值为 True。如果仅对于某些指定段落将该属性设置为 True,则该属性会返回 wdUndefined。Long 类型,可读写。
3Alignment 返回或设置一个 WdParagraphAlignment 常量,该常量代表指定段落的对齐方式,可读写。
4Application返回一个代表 WPS 应用程序的 Application 对象。
5AutoAdjustRightIndent如果 WPS 会根据您指定的每行字符数自动调整指定段落的右缩进,则该属性值为 True。如果只将某些指定段落的 AutoAdjustRightIndent 属性设置为 True,则该属性会返回 wdUndefined。Long 类型,可读写。
6BaseLineAlignment返回或设置一个 WdBaselineAlignment 常量,该常量代表行中字体的垂直位置,可读写。
7Borders返回一个 Borders 集合,该集合代表指定对象的所有边框。
8CharacterUnitFirstLineIndent返回或设置首行或悬挂缩进的值(以字符为单位)。用正值设置首行缩进,用负值设置悬挂缩进。Single 类型,可读写。
9CharacterUnitLeftIndent该属性返回或设置指定段落的左缩进量(以字符为单位)。Single 类型,可读写。
10CharacterUnitRightIndent该属性返回或设置指定段落的右缩进量(以字符为单位)。Single 类型,可读写。
11Count返回一个 Long 类型的值,该值代表集合中的段数。只读。
12Creator返回一个 32 位整数,该整数代表在其中创建特定对象的应用程序。只读 Long 类型。
13DisableLineHeightGrid如果该属性的值为 True,则当指定每页的行数时,WPS 会将指定段落中的字符与行网格对齐。如果只将某些指定段落的 DisableLineHeightGrid 属性设置为 True,则返回 wdUndefined。Long 类型,可读写。
14FarEastLineBreakControl如果为 True,则 WPS 会将东亚语言文字的换行规则应用于指定的段落。如果只将某些指定段落的 FarEastLineBreakControl 属性设定为 True,则返回 wdUndefined。Long 类型,可读写。
15First返回一个 Paragraph 对象,该对象代表在 Paragraphs 集合中的第一个项目。
16FirstLineIndent返回或设置首行缩进或悬挂缩进的大小(以磅值表示)。用正数设置首行缩进的尺寸,用负数设置悬挂缩进的尺寸。Single 类型,可读写。
17Format 返回或设置一个 ParagraphFormat 对象,该对象代表指定的一个或多个段落的格式。
18HalfWidthPunctuationOnTopOfLine如果为 True,则 WPS 会将指定段落行首的标点符号改为半角字符。如果仅将某些指定段落的该属性设置为 True,则此属性将返回 wdUndefined。Long 类型,可读写。
19HangingPunctuation    如果为 True,则指定段落中的标点将可以溢出边界。如果仅将某些指定段落的该属性设置为 True,则返回 wdUndefined。Long 类型,可读写。
20Hyphenation如果指定的段落进行自动断字,则该属性值为 True。如果指定的段落不进行自动断字,则该属性值为 False。可读写 Long 类型。
21KeepTogether在 WPS 对文档重新分页时,如果指定段落中的所有行都位于同一页上,则该属性值为 True。可读写 Long 类型。
22KeepWithNext在 WPS 对文档重新分页时,如果指定段落与其下一段位于同一页上,则该属性值为 True。可读写 Long 类型。
23Last返回一个 Paragraph 对象,该对象代表段落集合中的最后一个项目。
24LeftIndent返回或设置一个 Single 类型的值,该值代表指定段落的左缩进值(以磅为单位)。可读写。
25LineSpacing返回或设置指定段落的行距(以磅为单位)。Single 类型,可读写。
26LineSpacingRule返回或设置指定段落的行距。可读写 WdLineSpacing 类型。
27LineUnitAfter返回或设置指定段落的段后间距(以网格线为单位)。可读写 Single 类型。
28LineUnitBefore返回或设置指定段落的段前间距(以网格线为单位)。可读写 Single 类型。
29NoLineNumber如果取消指定段的行号,则该属性值为 True。该属性值可以是 True、False 或 wdUndefined。可读写 Long 类型。
30OutlineLevel返回或设置指定段落的大纲级别。可读写 WdOutlineLevel 类型。
31PageBreakBefore如果在指定段落前插入了分页符,则该属性值为 True。该属性值可以是 True、False 或 wdUndefined。可读写 Long 类型。
32Parent返回一个 Object 类型值,该值代表指定 Paragraphs 对象的父对象。
33ReadingOrder返回或设置指定段落的读取次序而不改变其对齐方式。可读写 WdReadingOrder 类型。
34RightIndent返回或设置指定段落的右缩进量(以磅为单位)。可读写 Single 类型。
35Shading返回一个 Shading 对象,该对象代表指定段落的底纹格式。
36SpaceAfter返回或设置指定段落或文本栏后面的间距(以磅为单位)。可读/写 Single 类型。
37SpaceAfterAuto如果 WPS 自动设置指定段落的段后间距,则该属性为 True。可读/写 Long 类型。
38SpaceBefore返回或设置指定段落的段前间距(以磅为单位)。可读/写 Single 类型。
39SpaceBeforeAuto如果 WPS 自动设置指定段落的段前间距,则该属性为 True。可读/写 Long 类型。
40Style返回或设置指定段落的样式。可读写 Variant 类型。
41TabStops返回或设置一个 TabStops 集合,该集合代表指定段落中的所有自定义制表位。可读写。
42WidowControl在 WPS 对文档重新分页时,如果指定段落的首行和末行与段落的其他各行同页,则该属性值为 True。该属性值可以是 True、False 或 wdUndefined。可读写 Long 类型。
43WordWrap如果 WPS 在指定段落中的西文单词中间断字换行,则该属性值为 True。可读写 Long 类型。

1.2 获取内容段落数

        上篇讲过表格获取数量是通过Count属性,这里同样是通过Count获取内容的段落数,代码如下:

/*** 修改标题和正文样式*/
function 修改标题和正文样式(){console.log(ActiveDocument.Paragraphs.Count);
}

输出结果如下图:

1.3 获取段落样式

        这里得到段落数后,我们则可以循环获取所有段落内容,并通过段落属性Style判断出标题部分,进行样式调整。代码如下:

/*** 修改标题和正文样式*/
function 修改标题和正文样式(){// 循环获取段落信息for(var i = 1; i <= ActiveDocument.Paragraphs.Count; i++){// 获取每个段落范围的内容var rangeObj = ActiveDocument.Paragraphs.Item(i).Range;//   console.log(rangeObj.Style.toString());}}

输出结果:

        如上图所示,很容易判断出哪些范围为标题,哪些为正文。当然,有时会出现返回样式值为空情况,这里则需要做下容错处理,代码如下:

/*** 修改标题和正文样式*/
function 修改标题和正文样式(){// 循环获取段落信息for(var i = 1; i <= ActiveDocument.Paragraphs.Count; i++){// 获取每个段落范围的内容var rangeObj = ActiveDocument.Paragraphs.Item(i).Range;//   获取范围样式var styleName = rangeObj.Style;// 如果样式返回结果为空,则继续循环下一个if(!styleName) continue;styleName = styleName.toString();console.log(styleName);}
}

1.4 过滤出标题段落

        现在通过switch来过滤出对应的标题段落内容,另外不同文档中标题样式名不一定叫“标题 1”、“标题 2” 等,根据分析出的数据,作对应调整即可。这里只到2级标题,所以不作过深层次筛选,代码如下:

/*** 修改标题和正文样式*/
function 修改标题和正文样式(){// 循环获取段落信息for(var i = 1; i <= ActiveDocument.Paragraphs.Count; i++){// 获取每个段落范围的内容var rangeObj = ActiveDocument.Paragraphs.Item(i).Range;//   获取范围样式var styleName = rangeObj.Style;// 如果样式返回结果为空,则继续循环下一个if(!styleName) continue;styleName = styleName.toString();// 过滤出标题段落switch(styleName){case '标题 1': console.log(styleName);break;case '标题 2': console.log(styleName);break;case '标题 3': console.log(styleName);break;}}
}

输出结果:

1.5 增加修改样式函数

        这里增加一个修改样式的单独功能函数,这是因为减少代码冗余量,代码如下:

/*** 修改样式*/
function editStyle(rangeObj, name, size){// 选择当前内容rangeObj.Select();// 设置字段样式(font => {font.Size = size;font.Name = name;font.Blod = true;})(Selection.Font);	
}

1.6 修改标题样式

        前期准备工作做完后,现在则可以正式修改标题样式了,代码如下:

/*** 修改样式*/
function editStyle(rangeObj, name, size){// 选择当前内容rangeObj.Select();// 设置字段样式(font => {font.Size = size;font.Name = name;font.Blod = true;})(Selection.Font);	
}/*** 修改标题和正文样式*/
function 修改标题和正文样式(){// 循环获取段落信息for(var i = 1; i <= ActiveDocument.Paragraphs.Count; i++){// 获取每个段落范围的内容var rangeObj = ActiveDocument.Paragraphs.Item(i).Range;//   获取范围样式var styleName = rangeObj.Style;// 如果样式返回结果为空,则继续循环下一个if(!styleName) continue;// styleName = styleName.toString();// 过滤出标题段落switch(styleName){case '标题 1': editStyle(rangeObj, "黑体", 16);break;case '标题 2': editStyle(rangeObj, "楷体", 16);break;case '标题 3': editStyle(rangeObj, "仿宋", 14);break;}}
}

        点击运行宏,如下图:

        运行结束后,查看文档,则标题根据设置样式修改完成了,如下图:

二、修改正文

        这里细心朋友可能就发现了,修改“正文”内容就很简单了,直接在switch中增加一个case判断即可,代码如下:

/*** 修改标题和正文样式*/
function 修改标题和正文样式(){// 循环获取段落信息for(var i = 1; i <= ActiveDocument.Paragraphs.Count; i++){// 获取每个段落范围的内容var rangeObj = ActiveDocument.Paragraphs.Item(i).Range;//   获取范围样式var styleName = rangeObj.Style;// 如果样式返回结果为空,则继续循环下一个if(!styleName) continue;//styleName = styleName.toString();// 过滤出标题段落switch(styleName){case '标题 1': editStyle(rangeObj, "黑体", 16);break;case '标题 2': editStyle(rangeObj, "楷体", 16);break;case '标题 3': editStyle(rangeObj, "仿宋", 14);break;case '正文': editStyle(rangeObj, "宋体", 12);break;}}
}

运行结束后,标题和样式都根据代码中设定的样式,进行更新了,文档效果如下:

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

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

相关文章

Install4J安装界面中如何使用脚本找到依赖程序XShell的安装位置

前言 写了一个工具, 使用Install4j打包, 但因为需要用到XShell, 所以希望在安装界面能够提前让用户配置好XShell的安装位置, 所以对Install4j的安装界面需要自定义, 后期在程序中直接过去安装位置就可以正常使用. 调研 和git-bash不一样, 安装版的XShell没有在注册表里存储安…

Ubuntu系统下使用apt-get安装Redis

记录一下Ubuntu20.04 64位系统下使用apt-get安装Redis 首先检查一下系统是否安装过redis whereis redismywmyw-K84HR:~$ whereis redis redis: mywmyw-K84HR:~$ 更新软件包 sudo apt-get update -y安装redis sudo apt-get install redis-server -ymywmyw-K84HR:~$ sudo apt…

Java常见CodeReview及编码规范

鉴于自己的开发经验,以及常见容易产生bug及性能问题的点做个记录. 1.数据库 如果开发人员的经验不足,Java通过ORM(Mybatis)对数据库的操作的性能问题比较隐蔽.因为不压测或者异常case没发生的时候一般发现不了问题.特别是异常case发生的时候. 除配置表以外的sql都要经过expl…

Learning Memory-guided Normality for Anomaly Detection 论文阅读

Learning Memory-guided Normality for Anomaly Detection 摘要1.介绍2.相关工作3.方法3.1网络架构3.1.1 Encoder and decoder3.1.2 Memory 3.2. Training loss3.3. Abnormality score 4.实验5.总结总结&代码复现&#xff1a; 文章信息&#xff1a; 发表于&#xff1a;cvpr…

消息中间件之间的区别

一.单机吞吐量 ActiveMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RabbitMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RocketMQ&#xff1a;10万级&#xff0c;RocketMQ也是可以支撑高吞吐的一种MQ Kafka&#xff…

Python的requests库实现HTTPS

嘿&#xff0c;Python程序员们&#xff01;今天我们要来点刺激的——使用Python的requests库实现HTTPS请求&#xff01;是的&#xff0c;你没有听错&#xff0c;我们要一起迈入HTTPS的神秘世界&#xff01; 首先&#xff0c;我们来了解一下HTTPS是什么。HTTPS是HTTP Secure的缩…

BUU SQL COURSE 1

四 发现有登录框&#xff0c;爆破半天也爆破不出来&#xff0c;只能从别的地方下手了 F12一下 发现了一个传参 进去发现id可以传参&#xff0c;sql注入一下试试 前三个都有回显&#xff0c;当id4的时候页面没有回显了&#xff0c;正好验证 了页面 有三个新闻 当order by 3的时…

ROS-ROS通信机制-服务通信

文章目录 一、服务通信基本知识二、自定义srv三、C实现四、Python实现 一、服务通信基本知识 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求…

我想修改vCenter IP地址

部署vCenter Server Appliance后&#xff0c;您可以在vCenter修改DNS设置并选择域名服务器使用。您可以编辑vCenter Server Appliance的IP地址设置。从vSphere 6.5开始正式支持vCenter修改IP地址。因此可以更改vCenter Server Appliance的IP地址和DNS设置。 注意&#xff1a;更…

Vue--第六天

vuex概述&#xff1a; 组件通信感觉有点白雪。。。。。。。。。。 创建项目&#xff1a; 为了学习简介&#xff0c;先选几个&#xff0c;后续是要勾选很多的 建好后再进行组件导入 创建空仓库&#xff1a; 使用&#xff1a; 上面是store访问&#xff0c;下面是辅助函数的方式…

centos 7.9 二进制部署 kubernetes v1.27.7

文章目录 1. 预备条件2. 基础配置2.1 配置root远程登录2.2 配置主机名2.3 安装 ansible2.4 配置互信2.5 配置hosts文件2.6 关闭防firewalld火墙2.7 关闭 selinux2.8 关闭交换分区swap2.9 修改内核参数2.10 安装iptables2.11 开启ipvs2.12 配置limits参数2.13 配置 yum2.14 配置…

HarmonyOS学习--TypeScript语言学习(二)

本章目录如下&#xff1a; 一、基础类型 二、运算符 三、变量声明 四、类型断言 五、类型推断 TypeScript支持一些基础的数据类型&#xff0c;如布尔型、数组、字符串等&#xff0c;下文举例几个较为常用的数据类型&#xff0c;我们来了解下他们的基本使用。 关于let 我们…

ctfshow sql 186-190

186大小写绕过 1 order by 3-- 发现union select被过滤&#xff0c;用大小写来绕过 1 union seleCT 1,2,database() --1 union seleCT 1,2,table_name from information_schema.tables where table_schemactfshow_web --1 union seleCT 1,2,column_name from information_schem…

Postman和Apifox针对不同环境、全局变量的使用与比较

文章目录 一、Postman1、配置环境和全局变量2、验证3、存在问题分析 二、Apifox1、配置环境和全局参数2、创建公共脚本3、测试 总结 一、Postman 1、配置环境和全局变量 在Postman的界面中&#xff0c;点击"Environment"&#xff0c;添加我们需要的环境&#xff0c…

数据库管理-第123期 Oracle相关两个参数(202301205)

数据库管理-第123期 Oracle相关两个参数&#xff08;202301205&#xff09; 最近在群聊中看到俩和Oracle数据库相关的俩参数&#xff0c;一个是Oracle数据库本身的&#xff0c;一个是来自于Weblogic的&#xff0c;挺有趣的&#xff0c;本期研究一下。&#xff08;本期涉及参数…

ppt转换成pdf文件

最近用到了&#xff0c;记一下&#xff1b; ppt转pdf分为两种情况: 小于2007版本的 .ppt格式&#xff08;2003&#xff09; 与大于2007版本的 .pptx格式&#xff08;2007&#xff09; .ppt格式为 二进制文件 .pptx格式为xml格式&#xff0c;在java中有不同的jar包需要使用 引入…

uniapp踩坑之项目:使用过滤器将时间格式化为特定格式

利用filters过滤器对数据直接进行格式化&#xff0c;注意&#xff1a;与method、onLoad、data同层级 <template><div><!-- orderInfo.time的数据为&#xff1a;2023-12-12 12:10:23 --><p>{{ orderInfo.time | formatDate }}</p> <!-- 2023-1…

springboot 集成Dubbo2.7.8 ,连接zookeeper 提示错误 zookeeper not connected

Dubbo 连接zookeeper时&#xff0c;提示“zookeeper not connected” java.lang.IllegalStateException: zookeeper not connectedat org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83) ~[dubbo-2.7.8.jar:2.…

MySQL5 和 MySQL8 的配置区别 一些注意事项

1、使用命令行查看MySQL的版本 先保证你的mysql正在运行&#xff0c;假如用户名是root&#xff0c;密码是123456&#xff0c;运行下边的代码可以查看mysql的版本号。 mysql -uroot -p123456这里我的版本是5.7.19。也就是5版本的。 2、不同版本对应的数据库驱动jar包&#x…

Object Detection in 20 Years: A Survey(2019.5)

文章目录 Abstract1. Introduction1.1. Difference from other related reviews1.2. Difficulties and Challenges in Object Detection 2. OBJECT DETECTION IN 20 YEARS2.1. 目标检测路线图2.1.1. 里程碑:传统探测器&#xff08;粗略了解&#xff09;2.1.2. 里程碑:基于CNN的…