当前位置: 首页 > news >正文

WPS JSA 宏脚本入门和样例

1入门

WPS window版本才支持JSA宏的功能。 可以自动化的操作文档中的一些内容。

参考文档:

WPS API 参考文档:https://open.wps.cn/previous/docs/client/wpsLoad

微软的Word API文档:Microsoft.Office.Interop.Word 命名空间 | Microsoft Learn

有问题,基本查看上面的两个文档,再加上百度搜索,就差不多了。

2 样例

function 选择所有图片()
{var arr = [...ActiveDocument.InlineShapes];// 关闭屏幕更新,提升执行效率Application.ScreenUpdating = false;ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);arr.forEach(shape=>{shape.Range.Editors.Add(wdEditorEveryone);});ActiveDocument.SelectAllEditableRanges(wdEditorEveryone);ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);// 开启屏幕更新Application.ScreenUpdating = true;	Console.log('批量设置【图片】完成。');MsgBox("选择完毕!");
}function 选择所有表格()
{var countT =0;var i = 0;	countT = ActiveDocument.Tables.Count;//计算文档中一共包含的表格数量。Application.ScreenUpdating = 0;ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);for(i=1;i<=countT;i++){ActiveDocument.Tables.Item(i).Range.Editors.Add(wdEditorEveryone);}ActiveDocument.SelectAllEditableRanges(wdEditorEveryone);ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);Application.ScreenUpdating = 1;MsgBox("表格完成批量调整,共计"+countT+"个!");
}function 选中有底纹表的Cell(){
Application.ScreenUpdating = 0;
ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);var countT =0;var i = 0;	countT = ActiveDocument.Tables.Count;//计算文档中一共包含的表格数量。console.log("处理到表格=" + 0 + ", 总共" + countT);for(i=1;i<=countT;i++){var tableObj = ActiveDocument.Tables.Item(i);var rowNum = tableObj.Rows.Count;var colNum = tableObj.Columns.Count;
//		console.log("aaa" + rowNum + " " + colNum);for(var j=1;j<=rowNum;j++){for(var k=1; k<= colNum; k++){try {var cell = tableObj.Cell(j,k);if(cell){console.log(cell.Shading.Texture);if(cell.Shading.BackgroundPatternColor != -16777216 || cell.Shading.Texture != 0){cell.Range.Editors.Add(wdEditorEveryone);}}} catch(e) {
//					console.log("bbb");}}}if(i%2000 == 0){console.log("处理到表格=" + i + ", 总共" + countT);}}ActiveDocument.SelectAllEditableRanges(wdEditorEveryone);ActiveDocument.DeleteAllEditableRanges(wdEditorEveryone);Application.ScreenUpdating = 1;MsgBox("选择完毕!");
}/*** 修改标题和正文样式*/
function 修改标题和正文样式_标题1到标题5和正文(){var countT = 0;var paragraphT = 0;var totalT = ActiveDocument.Paragraphs.Count;// 循环获取段落信息for(var i = 1; i <= totalT; i++){paragraphT ++;// 获取每个段落范围的内容var paragraphObj = ActiveDocument.Paragraphs.Item(i);//   获取范围样式var styleName = paragraphObj.Range.Style;// 如果样式返回结果为空,则继续循环下一个if(!styleName) continue;styleName = styleName.toString();console.log(styleName);// 过滤出标题段落switch(styleName){case '标题 1': countT++;editStyle1(paragraphObj);break;case '标题 2': countT++;editStyle2(paragraphObj);break;case '标题 3': countT++;editStyle3(paragraphObj);break;case '标题 4': countT++;editStyle4(paragraphObj);break;case '标题 5': countT++;editStyle5(paragraphObj);break;case '标题 6': countT++;editStyle5(paragraphObj);break;case '标题 7': countT++;editStyle5(paragraphObj);break;case '标题 8': countT++;editStyle5(paragraphObj);break;case '标题 9': countT++;editStyle5(paragraphObj);break;case '正文': countT++;editStyle(paragraphObj);break;case '文档正文': countT++;editStyle(paragraphObj);break;case '正文': countT++;editStyle(paragraphObj);break;case '标书正文': countT++;editStyle(paragraphObj);break;case '正文缩进': countT++;editStyle(paragraphObj);break;}if(paragraphT%5000 == 0){console.log("处理进度," + paragraphT + "个, 总共:"+ totalT)}}MsgBox("正文修改完毕!"+countT+"个!被修改了");
}/*** 标题1 格式*/
function editStyle1(paragraphObj){
//	console.log('标题1-' + paragraphObj.Range);// 设置字段样式 字体:小二宋体加粗;(font => {font.Blod = true;font.Size = 18;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);//设置标题段落的缩进setBiaotiSJ(paragraphObj);/*间距:段前段后:6磅;行距:1.5倍。*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 6;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 6;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}/*** 标题2 格式*/
function editStyle2(paragraphObj){console.log('111' + paragraphObj.Range);paragraphObj.Range.Select();// 三号宋体加粗;(font => {font.Blod = true;font.Size = 16;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);/*段落的对齐方式 对齐方式:左对齐;*/paragraphObj.Alignment = wdAlignParagraphLeft;/*大纲级别:2级;*/paragraphObj.OutlineLevel = wdOutlineLevel2;//设置标题段落的缩进setBiaotiSJ(paragraphObj);//	paragraphObj.CharacterUnitFirstLineIndent = 0;
//	paragraphObj.IndentCharWidth(0);/*间距:段前段后:6磅;行距:1.5倍。*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 6;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 6;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}/**
* 设置标题段落的缩进
*/
function setBiaotiSJ(paragraphObj){/*左侧、右侧:0字符;特殊格式:首行缩进,2字符*//* 该属性返回或设置指定段落的左缩进量(以字符为单位) */if(paragraphObj.LeftIndent != 0){paragraphObj.LeftIndent = 0;}if(paragraphObj.CharacterUnitLeftIndent != 0){paragraphObj.CharacterUnitLeftIndent = 0}
//	/* 该属性返回或设置指定段落的右缩进量(以字符为单位) */if(paragraphObj.RightIndent != 0){paragraphObj.RightIndent = 0;}if(paragraphObj.CharacterUnitRightIndent != 0){paragraphObj.CharacterUnitRightIndent = 0}/*设置首行缩进*/if(paragraphObj.FirstLineIndent != 0){paragraphObj.FirstLineIndent = 0;}if(paragraphObj.CharacterUnitFirstLineIndent != 0){paragraphObj.CharacterUnitFirstLineIndent = 0;}if(paragraphObj.LeftIndent != 0){paragraphObj.LeftIndent = 0;}if(paragraphObj.CharacterUnitLeftIndent != 0){paragraphObj.CharacterUnitLeftIndent = 0}
//	/* 该属性返回或设置指定段落的右缩进量(以字符为单位) */if(paragraphObj.RightIndent != 0){paragraphObj.RightIndent = 0;}if(paragraphObj.CharacterUnitRightIndent != 0){paragraphObj.CharacterUnitRightIndent = 0}/*设置首行缩进*/if(paragraphObj.FirstLineIndent != 0){paragraphObj.FirstLineIndent = 0;}if(paragraphObj.CharacterUnitFirstLineIndent != 0){paragraphObj.CharacterUnitFirstLineIndent = 0;}
}/*** 标题3 格式*/
function editStyle3(paragraphObj){// console.log('111' + paragraphObj.Range);// 小三宋体加粗;(font => {font.Blod = true;font.Size = 15;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);/*段落的对齐方式 对齐方式:左对齐;*/paragraphObj.Alignment = wdAlignParagraphLeft;/*大纲级别:3级;*/paragraphObj.OutlineLevel = wdOutlineLevel3;//设置标题段落的缩进setBiaotiSJ(paragraphObj);/*间距:段前段后:6磅;行距:1.5倍。*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 6;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 6;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}/*** 标题4 格式*/
function editStyle4(paragraphObj){// console.log('111' + paragraphObj.Range);// 四号宋体加粗;(font => {font.Blod = true;font.Size = 14;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);/*段落的对齐方式 对齐方式:左对齐;*/paragraphObj.Alignment = wdAlignParagraphLeft;/*大纲级别:4级;*/paragraphObj.OutlineLevel = wdOutlineLevel4;//设置标题段落的缩进setBiaotiSJ(paragraphObj);/*间距:段前段后:6磅;行距:1.5倍。*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 6;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 6;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}/*** 标题5 格式*/
function editStyle5(paragraphObj){// console.log('111' + paragraphObj.Range);// 小四宋体加粗;(font => {font.Blod = true;font.Size = 12;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);/*段落的对齐方式 对齐方式:左对齐;*/paragraphObj.Alignment = wdAlignParagraphLeft;/*大纲级别:5级;注释掉, 5、6、7、8、9 公用这个函数*/// paragraphObj.OutlineLevel = wdOutlineLevel5;//设置标题段落的缩进setBiaotiSJ(paragraphObj);/*间距:段前段后:6磅;行距:1.5倍。*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 6;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 6;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}/*** 修改样式*/
function editStyle(paragraphObj){// console.log('333' + paragraphObj.Range);
// 中文:宋体 小四号, 西文:Times New Roman 小四号(font => {
//		font.Blod = false;font.Size = 12;font.Name = "宋体";font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);/*段落的对齐方式 对齐方式:左对齐;*/paragraphObj.Alignment = wdAlignParagraphLeft;/*大纲级别:正文*/paragraphObj.OutlineLevel = wdOutlineLevelBodyText;/*左侧、右侧:0字符;特殊格式:首行缩进,2字符*//* 该属性返回或设置指定段落的左缩进量(以字符为单位) */paragraphObj.LeftIndent = 0;/* 该属性返回或设置指定段落的右缩进量(以字符为单位) */paragraphObj.RightIndent = 0;/*设置首行缩进*/paragraphObj.CharacterUnitFirstLineIndent  = 2;/*段前段后:0行;行距:1.5倍;*/(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 0;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 0;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);
}function 所有表格上面添加表标题(){var countT =0;var i = 0;	countT = ActiveDocument.Tables.Count;//计算文档中一共包含的表格数量。console.log("处理到表格=" + 0 + ", 总共" + countT);var firstEmpty = false;for(i=1;i<=countT;i++){var tableObj = ActiveDocument.Tables.Item(i);
//		tableObj.Range.InsertParagraphBefore()
//	tableObj.Range.InsertBefore("Introduction")var rangeObj = tableObj.Range;var beforeRangeObj = rangeObj.Previous(wdParagraph, 1);if (!beforeRangeObj) {firstEmpty = true;//beforeRangeObj = Application.ActiveDocument.Paragraphs.Add(ActiveDocument.Paragraphs.Item(1).Range).RangebeforeRangeObj = Application.ActiveDocument.Range(0, 0)beforeRangeObj.InsertParagraph()}var paA = beforeRangeObj.Paragraphs.Item(1);console.log("000-" + paA.Alignment + "-" +wdAlignParagraphCenter) ;console.log(paA.Range.Text.length);console.log("222=" + paA.Range.Text);paA.Range.Select();//如果上段有居中,且长度大于2 就表名不处理if(paA.Alignment == wdAlignParagraphCenter && paA.Range.Text.length > 2){console.log("44444");} else {console.log("33333");
//    	    beforeRangeObj.Select();//	 rangeObj.Collapse(wdCollapseStart)//        beforeRangeObj.InsertParagraphAfter()beforeRangeObj.Collapse(wdCollapseEnd)//网上移动一个字符的位置beforeRangeObj.MoveEnd(wdCharacter, -1);//        beforeRangeObj.InsertParagraphAfter()if(firstEmpty){firstEmpty = false;} else {beforeRangeObj.InsertParagraph()}beforeRangeObj.InsertAfter("表 xxx");}var lastParagraph = beforeRangeObj.Paragraphs.Item(beforeRangeObj.Paragraphs.Count);
//    lastParagraph.Range.Select();changeStyleBBT(lastParagraph);if(i%2000 == 0){console.log("处理到表格=" + i + ", 总共" + countT);}}MsgBox("选择完毕!");
}/**
* 表标题样式设置
**/
function changeStyleBBT(paragraphObj){/*段落的对齐方式 对齐方式:居中;*/paragraphObj.Alignment = wdAlignParagraphCenter;// 宋体 五号 加粗(font => {font.Blod = true;font.Size = 10.5;//5号字font.Name = "宋体";
//		font.NameAscii = 'Times New Roman';})(paragraphObj.Range.Font);//段前段后:0行;行距:1.5行距;(obj=>{/*本示例将活动文档中所有段落的段前间距设置为 6 磅。*/obj.SpaceBefore = 0;/*本示例将活动文档中所有段落的段后间距设置为 6 磅。*/obj.SpaceAfter = 0;/*为指定段落设置 1.5 倍行距。*/obj.LineSpacingRule = wdLineSpace1pt5;})(paragraphObj.Range.ParagraphFormat);changeStyleBBT_CJ(paragraphObj);
}/**
* 表标题样式缩进
*/
function changeStyleBBT_CJ(paragraphObj){/*左侧、右侧:0字符;特殊格式:首行缩进,2字符*//* 该属性返回或设置指定段落的左缩进量(以字符为单位) */if(paragraphObj.LeftIndent != 0){paragraphObj.LeftIndent = 0;}if(paragraphObj.CharacterUnitLeftIndent != 0){paragraphObj.CharacterUnitLeftIndent = 0}
//	/* 该属性返回或设置指定段落的右缩进量(以字符为单位) */if(paragraphObj.RightIndent != 0){paragraphObj.RightIndent = 0;}if(paragraphObj.CharacterUnitRightIndent != 0){paragraphObj.CharacterUnitRightIndent = 0}/*设置首行缩进*/if(paragraphObj.FirstLineIndent != 0){paragraphObj.FirstLineIndent = 0;}if(paragraphObj.CharacterUnitFirstLineIndent != 0){paragraphObj.CharacterUnitFirstLineIndent = 0;}if(paragraphObj.LeftIndent != 0){paragraphObj.LeftIndent = 0;}if(paragraphObj.CharacterUnitLeftIndent != 0){paragraphObj.CharacterUnitLeftIndent = 0}
//	/* 该属性返回或设置指定段落的右缩进量(以字符为单位) */if(paragraphObj.RightIndent != 0){paragraphObj.RightIndent = 0;}if(paragraphObj.CharacterUnitRightIndent != 0){paragraphObj.CharacterUnitRightIndent = 0}/*设置首行缩进*/if(paragraphObj.FirstLineIndent != 0){paragraphObj.FirstLineIndent = 0;}if(paragraphObj.CharacterUnitFirstLineIndent != 0){paragraphObj.CharacterUnitFirstLineIndent = 0;}
}

3 录制脚本

如果有些API搜索不到,可以通过录制脚本,看看WPS生成的脚本是怎么写的。

相关文章:

  • 【AI应用探讨】— GPT-4o模型应用场景
  • Synchronized 用过吗,其原理是什么???
  • 理解数学概念——线性(线性性)
  • Android: Null extracted folder for artifact: ResolvedArtifact(xxx 项目编译失败
  • Socket编程学习笔记之TCP与UDP
  • LabVIEW结构体内部缺陷振动检测
  • Android之保存图片到相册之前兼容不同机型需要注意的配置
  • 上岸北科大计算机专业难度有多大?北京科技大学计算机考研考情分析!
  • 【kubernetes】k8s集群安全机制 保姆级攻略
  • yg校园易购电商系统(Go+Vue)
  • DevExpress Installed
  • 人邮学院明日科技web前端开发案例教程(慕课版)第六章习题
  • java kotlin python 日志记录
  • 再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
  • 【乐吾乐3D可视化组态编辑器】用开关控制巡检车和路灯
  • Docker 笔记(2):Dockerfile
  • es6(二):字符串的扩展
  • EventListener原理
  • IDEA 插件开发入门教程
  • iOS编译提示和导航提示
  • JAVA_NIO系列——Channel和Buffer详解
  • Netty 4.1 源代码学习:线程模型
  • python 装饰器(一)
  • Spark学习笔记之相关记录
  • vue-loader 源码解析系列之 selector
  • vue-router 实现分析
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 开源SQL-on-Hadoop系统一览
  • 前端之Sass/Scss实战笔记
  • 区块链分支循环
  • 全栈开发——Linux
  • 微信小程序设置上一页数据
  • 我建了一个叫Hello World的项目
  • 异步
  • 智能合约开发环境搭建及Hello World合约
  • 数据库巡检项
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​用户画像从0到100的构建思路
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #include
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2)STL算法之元素计数
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)Linux Shell编程——输入输出重定向
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 中使用 Mutex 进行跨越进程边界的同步