【WPS应用案例】JS宏实时查询数据,高端的效果,往往只需要简单的代码
创作者俱乐部成员
【案例】下面是一张数据表和一张查询表,当我们在查询表单击A列的村名时,会在C:H区域实时显示该村的查询结果。
【代码】具体代码如下,可按ALT+F11打开WPS宏编辑器,复制下面的代码粘贴到编辑器中。
function Workbook_SheetSelectionChange(Sh, Target)
{
if(Sh.Name=='查询表'
&& Target.Column==1
&& Target.Row>1
&& Target.Count==1
)
{
ar=Sheets.Item('数据表').Range("a1").CurrentRegion.Value2
Range('c5:h65535').ClearContents()
br=二维数组查询(ar,1,Target)
Range('c2').Resize(br.length,br[0].length).Value2=br
}
}
function 二维数组查询(数组,查找列,查找值)
{
let 结果数组=[]
k=0
for(i=0;i<数组.length;i++){
结果数组[i]=new Array(数组[0].length)
if(数组[i][查找列-1]==查找值){
for(j=0;j<数组[0].length;j++){
结果数组[k][j]=数组[i][j]
}
k++
}
}
return 结果数组
}
【代码解释】
// 这是一个工作表单元格选择事件,当单元格被选择时触发相应事件
function Workbook_SheetSelectionChange(Sh, Target) {
// 如果工作表名是'查询表'...
if(Sh.Name=='查询表'
// 并且被选择的列为第一列..
&& Target.Column==1
// 并且被选择的行大于第一行
&& Target.Row>1
// 并且被选择的单元格只有一个
&& Target.Count==1
) {
// 将数据表的数据区域赋值给ar。
ar=Sheets.Item('数据表').Range("a1").CurrentRegion.Value2
// 清除范围为'c5:h65535'的所有单元格的内容。
Range('c5:h65535').ClearContents()
// 调用二维数组查询函数(下文中有解释),将结果赋值给br。参数包括ar(前面获取的数据),查找列为第一列的村名,以及查找值为被选择的单元格。
br=二维数组查询(ar,1,Target)
// 将二维数组br的内容输出到C2至H列区域。
Range('c2').Resize(br.length,br[0].length).Value2=br
}
}
// 定义了一个名为二维数组查询的函数,该函数接收三个参数:数组、查找列和查找值。
function 二维数组查询(数组,查找列,查找值) {
// 初始化一个空数组,准备用来存放查询结果。
let 结果数组=[]
// 初始化一个变量k,初值为0,用来记录找到的符合条件的行数。
k=0
// 遍历输入的数组。
for(i=0;i<数组.length;i++){
// 在结果数组中添加一个新的空数组,长度与原数组的第一行长度相同。这是为了存储可能存在的不规则二维数组。
结果数组[i]=new Array(数组[0].length)
// 如果数组的当前行的查找列的值等于查找值...
if(数组[i][查找列-1]==查找值){
// 将当前行的所有数据复制到结果数组的对应位置。
for(j=0;j<数组[0].length;j++){
结果数组[k][j]=数组[i][j]
}
// 将k增加1,表示找到了一行符合条件的记录。
k++
}
}
// 返回结果数组。
return 结果数组
}
【素材下载】点击下方链接,下载文件至本地文件夹进行练习。
https://www.kdocs.cn/l/ch1o5oEIXjEv
创作者俱乐部成员
创作者俱乐部成员
WPS函数专家