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;
		}
	}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

制作蓝牙小车(一)

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分2个部分&#xff08;app制作&#xff0c;蓝牙小车硬件以及程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstudio软件来制作安卓…

私域爆款案例拆解-元气森林

一、背景调研 二、引流策略 三、私域运营策略

第十一章 React 封装自定义组件

一、专栏介绍 &#x1f30d;&#x1f30d; 欢迎加入本专栏&#xff01;本专栏将引领您快速上手React&#xff0c;让我们一起放弃放弃的念头&#xff0c;开始学习之旅吧&#xff01;我们将从搭建React项目开始&#xff0c;逐步深入讲解最核心的hooks&#xff0c;以及React路由、…

客户案例:EDLP在央国企邮件数据合规中的价值与优势

客户背景 某机械制造企业&#xff0c;作为动力设备领域的领军企业&#xff0c;专门从事动力设备的研发、制造与销售。凭借丰富的经验与卓越的技术实力&#xff0c;该企业致力于深度研究动力设备的核心技术&#xff0c;为客户提供高效且可靠的解决方案。 客户需求 作为企业健康…

4 向微服务架构转变

文章目录 小型单体系统为什么选择小型单体系统微服务与生俱来的问题小型单体系统适用于小团队拥抱重构 规划未来拆分的小型单体应用程序新需求和游戏化用户故事游戏化&#xff1a;积分、徽章和排行榜 转向微服务独立的工作流程水平可伸缩性细粒度的非功能需求其他优势劣势 架构…

【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注&#xff0c;不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明&#xff1a; 9.10 C设计模式之单例模式设计 看过我之前的文章的&#xff0c;简单讲解过C/Q…

微信小程序---页面导航

1.声明式导航 &#xff08;1&#xff09;跳转到tabBar &#xff08;2&#xff09;跳转到非tabBar 注意&#xff0c;这个open-type"navigate"可以省略 &#xff08;3&#xff09;后退式导航 注意&#xff0c;如果只是后退到上一个页面&#xff0c;可以省略delta属性…

C++指针常量与常量指针

指针常量 const int * ptr new int(10); // 1&#xff09;常量指针 指针指向一个常量即指向的值不可改变 指针常量是指这个指针是一个常量&#xff0c;即指针的指向(地址)不可改变&#xff0c;但是地址对应的值是可以改变的。 常量指针 int * const ptr2 new int(20); // …

遥感图像之多模态检索AMFMN(支持关键词、句子对图像的检索)论文阅读、环境搭建、模型测试、模型训练

一、论文阅读 1、摘要背景 遥感跨模态文本图像检索以其灵活的输入和高效的查询等优点受到了广泛的关注。然而&#xff0c;传统的方法忽略了遥感图像多尺度和目标冗余的特点&#xff0c;导致检索精度下降。为了解决遥感多模态检索任务中的多尺度稀缺性和目标冗余问题&#xff…

机器学习硬件十年:性能变迁与趋势

本文分析了机器学习硬件性能的最新趋势&#xff0c;重点关注不同GPU和加速器的计算性能、内存、互连带宽、性价比和能效等指标。这篇分析旨在提供关于ML硬件能力及其瓶颈的全面视图。本文作者来自调研机构Epoch&#xff0c;致力于研究AI发展轨迹与治理的关键问题和趋势。 &…

RocketMQ源码

RocketMQ的核心三流程 启动流程 RocketMQ服务端由两部分组成NameServer和Broker&#xff0c;NameServer是服务的注册中心&#xff0c;Broker会把自己的地址注册到NameServer&#xff0c;生产者和消费者启动的时候会先从NameServer获取Broker的地址&#xff0c;再去从Broker发…

山东烟台一汽配城发生火灾 探索富维AI神器如何及时报警

近日&#xff0c;山东烟台一汽配城发生火灾&#xff0c;引起了广泛关注。火灾虽然被及时控制&#xff0c;但这一事件再次提醒我们&#xff0c;火灾预防的重要性不容忽视。在这一背景下&#xff0c;北京富维图像公司的FIS智能图像识别系统为我们提供了新的防范措施。 这一系统利…

使用人工智能优化常见业务流程

在现代商业环境中&#xff0c;人工智能(AI)正在改变企业的运营方式。将人工智能集成到业务流程中可以提高效率和准确性&#xff0c;从而节省大量时间和成本。 这使员工能够专注于更具战略性的任务。人工智能在商业中的应用范围从自动化日常任务到提供高级分析&#xff0c;以做…

Vue H5项目,怎么引入uni.webview sdk,调用uni postMessage实现手机蓝牙连接打印功能(uniapp)

前言 目前公司Vue H5项目&#xff0c;用webview打包成APP&#xff0c;现产品提出这样打包出来的app运行较慢&#xff0c;需要用uniapp方式&#xff08;即使用HBuilder编辑器来打包H5&#xff09;来打包&#xff0c;那需要的基座就不是安卓的基座而是uniapp的基座&#xff0c;而…

Appium 自动化测试从入门到精通,零基础也能听懂

1.Appium介绍 1&#xff0c;appium是开源的移动端自动化测试框架&#xff1b; 2&#xff0c;appium可以测试原生的、混合的、以及移动端的web项目&#xff1b; 3&#xff0c;appium可以测试ios&#xff0c;android应用&#xff08;当然了&#xff0c;还有firefoxos&#xff09…

记一次mybatis-plus的argument type mismatch报错

起初以为是boolean和数据库的tinyint不匹配导致&#xff0c;找了一天之后想起来把整个lambda注释掉发现list直接无法运行&#xff0c;说明问题不在boolean List<BmsBillboard> list bmsBillboardService.list(new LambdaQueryWrapper<BmsBillboard>().eq(BmsBillb…

盘点六款颇具潜力的伪原创AI工具

写作作为信息传递的主要媒介&#xff0c;在庞大的信息海洋中&#xff0c;为了在激烈的竞争中脱颖而出&#xff0c;伪原创AI工具成为越来越多写手的神秘利器。在本文中&#xff0c;我们将深入盘点六款颇具潜力的伪原创AI工具&#xff0c;为你揭开它们神秘的面纱。 1. 文心一言 …

【android开发-17】android中SQLite数据库CRUD详细介绍

1&#xff0c;SQLite数据库读写的操作步骤 在Android中&#xff0c;对SQLite数据库的操作主要包括以下步骤&#xff1a; 1&#xff0c;创建数据库&#xff1a;首先&#xff0c;您需要创建一个SQLite数据库。这可以通过在Android项目中创建一个新的类来实现&#xff0c;该类继…

操作系统内部机制学习

切换线程时需要保存什么 函数需要保存吗&#xff1f;函数在Flash上&#xff0c;不会被破坏&#xff0c;无需保存。函数执行到了哪里&#xff1f;需要保存吗&#xff1f;需要保存。全局变量需要保存吗&#xff1f;全局变量在内存上&#xff0c;无需保存。局部变量需要保存吗&am…

OpenWRT搭建本地web站点并结合内网穿透实现公网远程访问

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…