【JSA进阶一之活用录制宏】学会使用录制宏去学习JS
第1天,什么是JSA,我看拉小登老师已经在分享JSA基础知识了,不了解基础的可以参考他的系列科普帖子;我这里分享一些进阶的宏运用。
首先系统的学习官方的API是见很痛苦的事情,对新手也不是太友好,这里在你会JSA的基础知识,了解其运行规则后,学会活用录制宏能很大的减少学习成本,提高代码效率。【附官方API手册:WPS 开放平台】
本篇内容主要分享如何运用录制宏的代码来快速学习API并利用API完成相关JSA宏的开发,这种方法不需要去理解学习各种API原理,当然这种方法只适用于大量重复性的工作以及前期JSA学习,如果需要深入还是需要去了解学习各种API方法。
如图,案例来自天眼查下载的公开数据,进行录制宏的处理与运用,录制宏的操作位置如图所示。
一、学习验证录制宏的代码;
这里通过录制宏简单录制了对第二行开启筛选。
录制宏的代码有些是多余或者无用的,我们需要去判断哪行代码有用【PS:录制宏的代码块并非都是这种一行一行的,复杂功能录制宏会以一个object对象来表达】
Selection.AutoFilter(undefined, undefined, xlAnd, undefined, undefined);
ActiveWorkbook.Names.Add("高级搜索!_FilterDatabase", "=高级搜索!$A$2:$L$2", false, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
这是录制后的代码,这里我们该如何去判断这2行代码呢?
先判断哪一行代码的API方法是我们需要的。大家记住,一般 () 前的代码为某个API方法,这里有2个方法存在AutoFilter()、Add(),这里通过英文直译也能大概分辨出AutoFilter()为我们想要的API方法,如果不能判断,打开【官方API手册:WPS 开放平台】,搜索这2个单词,官方文档也有说明,也能分辨清楚。
其次,分辨清楚哪一行的方法是我们想要的,可以利用注释方法【代码前面加//可以停止运行这行代码,F11可以逐行运行代码】,在编辑器中进行逐行测试。
请看GIF:
这里通过注释逐行测试出第二行对开启关闭自动筛选没有影响,到这里我们就可以得出一个结论,第一行代码就是我们想要的开启关闭筛选。【PS:代码()内的各属性设置,可以通过WPS 开放平台了解,并使用逐行测试的方法进行各个参数调整测试学习其具体属性含义,通常情况使用录制宏的默认即可】
Selection.AutoFilter(undefined, undefined, xlAnd, undefined, undefined);
PS:这里对代码中的Selection作一个简单说明,Selection在录制宏中是常态化的一个代码,几乎你录制的所有宏都会出现它,代码意思是你在当前Sheet中选择的区域,当我们需要将录制宏代码转化为我们自己的代码时,需要通过代码Select()链接它。
这里录制的是删除第一行,全选有内容的区域,分辨按照省、市降序排列的代码。
这里大家可以看到我上文说的,这里的录制宏的排序功能是OBJ对象的方式来编写的,大家遇到这种,默认它是一块代码就行,遇到这种默认就是你录制的对应API功能,不需要去逐行验证了。
function Macro2()
{
Rows.Item("1:1").Select();
Selection.Delete(xlShiftUp);
Range("A1:L50001").Select();
Selection.Activate();
(obj=>{
(obj=>{
obj.Clear();
obj.Add(Range("G2:G50001"), xlSortOnValues, xlDescending, "", undefined);
obj.Add(Range("H2:H50001"), xlSortOnValues, xlDescending, "", undefined);
})(obj.SortFields);
obj.Header = xlYes;
obj.Orientation = xlSortColumns;
obj.MatchCase = false;
obj.SortMethod = xlPinYin;
obj.SetRange(Range("A1:L50001"));
obj.Apply();
})(ActiveSheet.Sort);
}
接下来简单说一下如何将录制的代码接到自己的代码上,
Range("a2:l2").Select();
Selection.AutoFilter(undefined, undefined, xlAnd, undefined, undefined);
通常情况下,录制的代码需要运行在自己的想要的区域,上文说过Selection的含义,我们可以在代码前面通过Range()圈定区域,使用Select()方法,选定圈定区域,来进行对应区域的处理。
这是我前期学习JSA的方法,有不对的地方欢迎指正。
下期分享什么评论区讨论!
下期再见!