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、网络空间测绘中,如何理解地标? 在网络空间测绘中,地标可以理解为在互联网空间中具有明显特征和稳定性的实体,它们可以作为网络空间的基准点,用于定位和标识其他网络实体。地标通常是在网络空间中具有较高价值和影响…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
