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

news2024/11/24 5:06:50

        该篇讲解下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.coloradmin.cn/o/1288194.html

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

相关文章

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功&#xff0c;选择右边的控制台 点击云产品&#xff0c;选择对象存储 创建存储桶 填写名称&#xff0c;选择公有读&#xff0c;私有写一直下一步&#xff0c;到创建 选择安全管理&#…

机器人制作开源方案 | 自主型收集餐盘机器人

作者&#xff1a;蔡佳怡、朱启会、郭晨杰、杨昊天、焦家辉 单位&#xff1a;西安外事学院 指导老师&#xff1a;杜喜昭、张燕 1. 产品说明 1.1 设计目的 对于如学校、工厂这种大型食堂&#xff0c;一般的收餐盘模式为用餐人用餐完毕后&#xff0c;把餐盘拿到最近的收餐盘点&…

5.清除SVN用户账号两种方式

常用的客户端又分为2种&#xff0c;第一种是安装在操作系统中的客户端&#xff0c;另外一种是Eclipse的插件 1.操作系统中的客户端 用的小乌龟&#xff0c;在小乌龟里面先把账户信息删除&#xff1a; 1、随便找一个目录&#xff0c;右键tortoiseSVN-------》setting--------…

【DPDK】Trace Library

概述 跟踪是一种用于了解运行中的软件系统中发生了什么的技术。用于跟踪的软件被称为跟踪器&#xff0c;在概念上类似于磁带记录器。记录时&#xff0c;放置在软件源代码中的特定检测点会生成保存在巨大磁带上的事件&#xff1a;跟踪文件。稍后可以在跟踪查看器中打开跟踪文件…

Windows XP安装SVN软件

SVN全称为SubVersion&#xff0c;是Apache开源软件协议下&#xff0c;一个用于代码分布式管理的工具&#xff0c;其孵化的软件产品是TortoiseSVN&#xff0c;该软件是带图形界面的代码管理工具&#xff0c;类似于Git&#xff0c;多了一个图形界面&#xff0c;方便鼠标操作。  …

【每日OJ —— 145. 二叉树的后序遍历】

每日OJ —— 145. 二叉树的后序遍历 1.题目&#xff1a;145. 二叉树的后序遍历2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;145. 二叉树的后序遍历 2.解法 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间&#xff0c;这样的效率太…

MATLAB - 评估拟合优度、评价拟合效果

系列文章目录 文章目录 系列文章目录前言一、如何评估拟合优度二、拟合优度统计2.1 SSE - 误差引起的平方和2.2 R 平方2.3 自由度调整 R 平方2.4 均方根误差 三、MATLAB - 评估曲线拟合度3.1 加载数据并拟合多项式曲线3.2 绘制拟合方程、数据、残差和预测范围图3.3 评估指定点3…

外包干了2个月,技术倒退2年。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

c++--面向对象特性

1.面向对象指的是继承&#xff0c;封装&#xff0c;多态。 继承主要关注类的构造&#xff0c;赋值&#xff0c;析构。 以下对多态&#xff0c;封装进行补充说明。 2、多态 2.1.定义 a.赋值 派生类的指针&#xff0c;可以赋值给基类的指针。 派送类的对象&#xff0c;可以赋值给…

某60区块链安全之JOP实战二学习记录

区块链安全 文章目录 区块链安全Jump Oriented Programming实战二实验目的掌握对EVM逆向能力实验环境实验工具实验原理实验内容Jump Oriented Programming实战二 实验步骤Jump Oriented Programming实战二 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约中中Jum…

MySQL_1. mysql数据库介绍

shell脚本差不多快完结了接下来会为大家更新MySQL系列的相关的基础知识笔记&#xff0c;希望对大家有所帮助&#xff0c;好废话不多说&#xff0c;接下来开始正题&#xff01; 1.mysql数据库介绍 mysql 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言…

C#,数值计算——计算实对称矩阵所有特征值与特征向量的三角分解与QL迭代法源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Computes all eigenvalues and eigenvectors of a real symmetric matrix by /// reduction to tridiagonal form followed by QL iteration. /// </summary> pu…

Linux磁盘阵列raid

RAID介绍 RAID &#xff08; Redundant Array of Independent Disks &#xff09;即独立磁盘冗余阵列&#xff0c;通常简称为磁盘阵列。简单地说&#xff0c; RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统&#xff0c;从而提供比单个磁盘更高的存储性能和数据冗余的技…

使用 javascript 模拟 git diff 命令实现文本文件差异比较

diff.html&#xff1a; <!DOCTYPE html> <html> <head><title>文件比较</title><meta charset"UTF-8"> </head> <body> <h1>文件比较</h1> <form><label for"file1">版本1&…

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…

CFS三层靶机内网渗透

CFS三层靶机内网渗透 一、靶场搭建1.基础参数信息2.靶场搭建2.1网卡配置2.2Target1配置2.2.1 网卡配置2.2.2 Target1 BT配置 2.3Target2配置2.3.1 网卡配置2.3.2 Target2 BT配置 2.4Target3配置 二、内网渗透Target11.1信息收集1.1.1IP收集1.1.2端口收集1.1.3目录收集 1.2 webs…

思维模型 移情效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。情感迁移&#xff0c;爱屋及乌。 1 移情效应的应用 1.1 移情效应在市场营销中应用-多芬&#xff08;Dove&#xff09;“真美运动” 多芬&#xff08;Dove&#xff09;是一家知名的个人护理…

园区规划技术要点

&#xff08;一&#xff09;技术点介绍 1.WLAN&#xff1a;无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种无线计算机网络&#xff0c;使用无线信道代替有线传输介质连接两个或多个设备形成一个局域网LAN&#xff08;Local Area Network&#xff09…

BUU UPLOAD COURSE 1

传一个cmd.php木马文件 访问一下这个图片地址 发现什么都没有&#xff0c;在hackbar里面连接一下我们的木马 然后看到了一些目录 然后直接查看flag就出来了 这里也可以用蚁剑去连接 直接访问地址&#xff0c;拿着地址去连接就行了。

从零开始,轻松实现Python接口自动化测试(基于PyCharm)

1.接口清单整理 &#xff08;1&#xff09;请求&#xff1a; 请求URL请求方法请求参数请求报文 &#xff08;2&#xff09;响应 状态码响应数据 2.用例设计 &#xff08;1&#xff09;单接口测试用例 模板&#xff1a;id、模块、接口名称、请求URL、用例名称、请求方法、…