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

相关文章:
WPS Office JS宏实现批量处理Word中的标题和正文的样式
该篇讲解下word文档中的标题和正文批量修改样式,如下图: 前面一篇已讲解了WPS Office宏编辑器操作方法,这里不细讲了,如有不清楚可以查看该篇:https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…...
论文怎么改才能降低重复率
一、引言:智能工具助力,轻松降低论文重复率 论文的重复率是学术写作中的重要问题,如何有效降低重复率成为了许多研究者的关注焦点。如今,智能工具的发展为我们提供了更多选择。本文将介绍几种实用的智能工具,包括快码…...
【从零开始学习JVM | 第六篇】快速了解 直接内存
前言: 当谈及Java虚拟机(JVM)的内存管理时,我们通常会想到堆内存和栈内存。然而,还有一种被称为"直接内存"的特殊内存区域,它在Java应用程序中起着重要的作用。直接内存提供了一种与Java堆内存和…...
Wireshark中的http协议包分析
Wireshark可以跟踪网络协议的通讯过程,本节通过http协议,在了解Wireshark使用的基础上,重温http协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 字节流…...
ubuntu如何远程ssh登录Windows环境并执行测试命令
ubuntu如何远程ssh登录Windows环境并执行测试命令 1 paramiko模块简介1.1 安装paramiko1.2 paramiko基本用法1.2.1 创建SSHClient实例1.2.2 设置主机密钥策略1.2.3 连接SSH服务器1.2.4 执行命令1.2.5 关闭SSH连接1.2.6 异常处理 2 windows的配置2.1 启动OpenSSH服务2.2 配置防火…...
人工智能应用专栏----专栏介绍
文章目录 本专栏主要记录人工智能的应用方面的内容,包括chatGPT、AI绘图等等; 订阅后可私聊我获取 《从零注册并登录使用ChatGPT》 《从零开始使用chatGPT的API;通过chatgpt-next-web部署自己chatGPT web网页;无需翻墙,…...
【lesson11】表的约束(4)
文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保…...
将单体应用程序迁移到微服务
多年来,我处理过多个单体应用,并将其中一些迁移到了微服务架构。我打算写下我所学到的东西以及我从经验中用到的策略,以实现成功的迁移。在这篇文章中,我将以AWS为例,但基本原则保持不变,可用于任何类型的基…...
Python读取.dat格式数据并转为.png,.jpg,.bmp等可视化格式(附代码)
.dat文件的命名规则没有统一的规定,但通常以.dat为扩展名。 目录 一、 .dat格式数据1.1 .dat数据用途1.2 常见的.dat文件格式1.3 .dat文件示例 二、读取.dat格式数据2.1 单个.dat文件读取并转换2.1.1 代码2.1.2 查看数据2.1.3 输出查看8Bit图片 2.2 批量.dat文件读取…...
matplotlib 默认属性和绘图风格
matplotlib 默认属性 一、绘图风格1. 绘制叠加折线图2. Solarize_Light23. _classic_test_patch4. _mpl-gallery5. _mpl-gallery-nogrid6. bmh7. classic8. fivethirtyeight9. ggplot10. grayscale11. seaborn12. seaborn-bright13. seaborn-colorblind14. seaborn-dark15. sea…...
ip地址怎么转化为十进制
IP地址是在计算机网络中广泛使用的一种标识符,它用于唯一地标识网络上的设备。在网络通信过程中,IP地址扮演着非常重要的角色。但是,对于一些非专业人士来说,IP地址可能是一个陌生的概念。为了更好地理解IP地址,本文…...
【Spring进阶系列丨第五篇】详解Spring中的依赖注入
文章目录 一、说明二、构造函数注入2.1、方式一【index索引方式】2.1.1、定义Bean2.1.2、主配置文件中配置Bean2.1.3、测试 2.2、方式二【indextype组合方式】2.2.1、定义Bean2.2.2、主配置文件配置Bean2.2.3、测试2.2.4、解决方案 2.3、方式三【name方式】2.3.1、定义Bean2.3.…...
DAP数据集成与算法模型如何结合使用
企业信息化建设会越来越完善,越来越体系化,当今数据时代背景下更加强调、重视数据的价值,以数据说话,通过数据为企业提升渠道转化率、改善企业产品、实现精准运营,为企业打造自助模式的数据分析成果,以数据…...
大数据监控
HBase 监控 {name“RegionServer”,sub“Server”,} irate(hadoop_hbase_totalrequestcount[5m]) irate(hadoop_hbase_totalrequestcount{instanceName“hacluster4”}[2m]) https://blog.csdn.net/Samooyou/article/details/129275640 https://www.tencentcloud.com/zh/doc…...
【C语言】数据结构——小堆实例探究
💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读: 我们在前面学习了单链表和顺序表,以及栈和队列。 今天我们来学习小堆。 关注博主或是订阅专栏&a…...
Vue中比较两个JSON对象的差异
要在Vue.js中实现JSON数据的对比差异功能,你可以使用一些库来简化任务,比如diff-match-patch。以下是一个简单的例子,演示如何使用deep-diff库在Vue.js中比较两个JSON对象的差异: 首先,确保你的项目中已经安装了diff-m…...
前端知识库Html5和CSS3
1、常见的水平垂直居中实现方案 最简单的方案是flex布局 .container{display: flex;align-items: center;justify-content: center; }绝对定位配合margin:auto(一定要给.son宽高) .father {position: relative;height: 300px; } .son {position: absolute;top: 0;right: 0;b…...
智能优化算法应用:基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鸡群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸡群算法4.实验参数设定5.算法结果6.参考文献7.MA…...
Apollo配置发布原理解析
📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…...
TrustGeo论文问题理解
1、网络空间测绘中,如何理解地标? 在网络空间测绘中,地标可以理解为在互联网空间中具有明显特征和稳定性的实体,它们可以作为网络空间的基准点,用于定位和标识其他网络实体。地标通常是在网络空间中具有较高价值和影响…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
