【WPS应用案例】JS两表按关键字相互链接,快速查找定位
创作者俱乐部成员
今天给大家分享一个实战案例,两个工作表根据关键字相互链接,用于快速查看数据,效果如下:
当我们点击表中的村名时,会自动跳转到另一张表中的相应位置。
代码如下:
function Workbook_SheetBeforeDoubleClick(Sh,Target, Cancel){
let sh1=Sheets.Item('人员信息表')
let sh2=Sheets.Item('各村人数')
if(Sh.Name==sh1.Name){
if(Target.Column==4&&Target.Row>3){
r=WorksheetFunction.Match(Target.Value2,sh2.Range("b:b"),0)
if(r>0){
Cancel.Value=true
sh2.Activate()
sh2.Cells.Item(r,2).Activate()
}
}
}
if(Sh.Name==sh2.Name){
if(Target.Column==2&&Target.Row>1){
r=WorksheetFunction.Match(Target.Value2,sh1.Range("d:d"),0)
if(r>0){
Cancel.Value=true
sh1.Activate()
sh1.Cells.Item(r,4).Activate()
}
}
}
}
代码解释如下:
// 定义一个双击事件。
function Workbook_SheetBeforeDoubleClick(Sh,Target, Cancel){
// 使用Sheets集合中的'Item'方法获取名为'人员信息表'的工作表,并将其赋值给变量sh1。
let sh1=Sheets.Item('人员信息表')
// 使用Sheets集合中的'Item'方法获取名为'各村组人数'的工作表,并将其赋值给变量sh2。
let sh2=Sheets.Item('各村组人数')
// 如果被双击的工作表的名字与sh1('人员信息表')的名字相同...
if(Sh.Name==sh1.Name){
// 如果被双击的单元格位于第4列,并且行号大于3...
if(Target.Column==4&&Target.Row>3){
// 使用WorksheetFunction对象的Match方法,在sh2工作表的'b:b'范围内找到被双击单元格的值(Target.Value2)的行号,并将行号赋值给变量r。
r=WorksheetFunction.Match(Target.Value2,sh2.Range("b:b"),0)
// 如果r的值大于0,说明在sh2工作表的'b:b'范围内找到了被双击单元格。
if(r>0){
// 将取消操作的值设为true,这会阻止双击操作的其他行为(如编辑单元格)。
Cancel.Value=true
// 激活sh2工作表,使它成为当前活动的工作表。
sh2.Activate()
// 激活sh2工作表中位于r行,第2列的单元格,使这个单元格成为当前活动的单元格。
sh2.Cells.Item(r,2).Activate()
}
}
}
// 如果被双击的工作表的名字与sh2('各村组人数')的名字相同...
if(Sh.Name==sh2.Name){
// 如果被双击的单元格位于第2列,并且行号大于1...
if(Target.Column==2&&Target.Row>1){
// 使用WorksheetFunction对象的Match方法,在sh1工作表的'd:d'范围内找到被双击单元格的值(Target.Value2)的行号,并将匹配结果赋值给变量r。
r=WorksheetFunction.Match(Target.Value2,sh1.Range("d:d"),0)
// 如果r的值大于0,说明在sh1工作表的'd:d'范围内找到了被双击单元格的值的匹配项。
if(r>0){
// 将取消操作的值设为true,这会阻止双击操作的其他行为(如编辑单元格)。
Cancel.Value=true
// 激活sh1工作表,使它成为当前活动的工作表。
sh1.Activate()
// 激活sh1工作表中位于r行,第4列的单元格,使这个单元格成为当前活动的单元格。
sh1.Cells.Item(r,4).Activate()
}}}}}} // 结束函数定义
以下为操作文件,大家可下载练习。