如何在Google Sheets的QUERY公式中调用自定义函数?
方案可行性说明
这个实现方案是可行的,但有几个细节需要留意:
公式逻辑
你写的QUERY搭配IMPORTRANGE的公式能正常工作,它会从指定的外部表格Reference Info!A2:J区域里,筛选出第二列(Col2)内容和当前表格名称完全匹配的行:
=query(IMPORTRANGE("https://docs.google.com/spreadsheets/d/fsdgsgsdhdshldhsdhgvs/edit","Reference Info!A2:J"),"select * where Col2 matches '"&fileName()&"'")
脚本注意点
你的fileName()函数能正确返回当前表格的名称,但添加的onOpen()函数其实不会触发公式的重新计算——自定义函数的重新计算触发条件只有这几种:
- 函数所在单元格被手动编辑
- 表格重新打开
- 通过「文件 > 电子表格设置 > 计算」里的选项手动触发重新计算
如果想要让公式能自动响应表格名称的修改,你需要额外设置可安装的 onChange 触发器,或者手动触发重新计算。当前的脚本代码如下:
//由于不确定fileName()是否会随重新计算运行,我添加了这个函数 function onOpen(){ fileName(); } function fileName() { return SpreadsheetApp.getActiveSpreadsheet().getName(); }
另外要注意,第一次使用IMPORTRANGE时,必须授权当前表格访问目标外部表格的数据,否则公式会返回权限错误。
内容的提问来源于stack exchange,提问作者onit
相关产品推荐
相关产品推荐

