有一阵子没写博客了,各种琐事忙碌;前段时间接触了下WPS的宏功能,抽点时间写个学习笔记吧。
案例背景简单说一下,主任让我统计OA后台在建工程项目的概况,后台数据导出一张表,再问隔壁经营部的同事要了一张中标项目统计表。开始想着挺简单的,直接整合两张表的项目名称,两列数据筛选标记出重复值就行;然而OA后台统计的字段名是“工程合同”,经营部统计的是“项目名称”,双方数据并不能直接筛选重复值,“工程合同”=“项目名称”+“xxx合同”。
网上查了下资料,感觉可以用WPS的宏功能解决,果断开搞。
PS:WPS宏支持JS和VB两种模式,由于之前做过一段时间的web前端开发,对JS语言更熟悉,所以用的JS模式。
直接写几行测试代码上手:
function test()
{
var xmmc_arr = Range("B4:B60").Value();
console.log('test');
console.log(xmmc_arr);
console.log(JSON.stringify(xmmc_arr));
}
F5看下运行效果,可见变量是不能直接通过console调试的,要通过JSON.stringify()方法将JavaScript值转换为JSON字符串,这是一个小小的坑。
有宏录制的功能,即使在不查API文档的情况下,也能知道一些操作代码。这里直接使用js的includes()方法,对每个单元格的字符串做对比。
直接放上最终代码,顺便附上相关文档链接:
function Macro1() {
var results_xmarr = [];
var results_htarr = [];
//读取对应单元格的数据
var xmmc_arr = Range("B4:B60").Value();
var htmc_arr = Range("J2:J77").Value();
for (var x of xmmc_arr) {
for (var y of htmc_arr) {
if (y[0].includes(x[0])) {
results_xmarr.push(x);
results_htarr.push(y);
}
}
}
//在指定单元格写入数据
Range("H2:H77").Value2 = results_xmarr;
Range("I2:I77").Value2 = results_htarr;
}
WPS JS宏入门视频教程:
https://www.wps.cn/learning/course/detail/id/330734.html
WPS JS宏API文档:
https://open.wps.cn/docs/client/wpsLoad
Excel VBA 参考文档:
https://learn.microsoft.com/zh-cn/office/vba/api/overview/excel