Google apps script 根据非空白单元格的特定排列,使用应用程序脚本在Google工作表中设置公式

Google apps script 根据非空白单元格的特定排列,使用应用程序脚本在Google工作表中设置公式,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个资源列表,其中有四列不同的分类标签。 我正在构建一个搜索仪表板,它为这四个选项中的每一个都提供了输入选项(fcInput=B2:B5)。我想运行一个脚本,该脚本将根据包含要搜索的关键字的单元格的排列来更改使用的搜索公式(嵌套过滤器+搜索) 如果B2是fcInput中唯一不为空的单元格,则返回第一个公式;如果B3和B5不是空的,那么将返回第九个(下面的完整列表) 我不熟悉应用程序脚本/编码。我尝试了一些isBlank和多个if,if-else选项。排列问题使我的if/if-else链陷入停

我有一个资源列表,其中有四列不同的分类标签。 我正在构建一个搜索仪表板,它为这四个选项中的每一个都提供了输入选项(fcInput=B2:B5)。我想运行一个脚本,该脚本将根据包含要搜索的关键字的单元格的排列来更改使用的搜索公式(嵌套过滤器+搜索)

如果B2是fcInput中唯一不为空的单元格,则返回第一个公式;如果B3和B5不是空的,那么将返回第九个(下面的完整列表)

我不熟悉应用程序脚本/编码。我尝试了一些isBlank和多个if,if-else选项。排列问题使我的if/if-else链陷入停滞,也让我好奇是否有更有效的方法

公式共有16个选项:

=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K))
=FILTER(resources!C2:C,SEARCH(B3,resources!L2:L))
=FILTER(resources!C2:C,SEARCH(B4,resources!M2:M))
=FILTER(resources!C2:C,SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B3,resources!L2:L))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B4,resources!M2:M))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B3,resources!L2:L),SEARCH(B4,resources!M2:M))
=FILTER(resources!C2:C,SEARCH(B3,resources!L2:L),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B4,resources!M2:M),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B3,resources!L2:L),SEARCH(B4,resources!M2:M))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B3,resources!L2:L),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B4,resources!M2:M),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B3,resources!L2:L),SEARCH(B4,resources!M2:M),SEARCH(B5,resources!N2:N))
=FILTER(resources!C2:C,SEARCH(B2,resources!K2:K),SEARCH(B3,resources!L2:L),SEARCH(B4,resources!M2:M),SEARCH(B5,resources!N2:N))
// #16 is if all are blank, instruct user to input keywords in Input range

我相信这个函数应该输出你想要的公式,尽管我还没有测试过公式本身

您可能希望使用onEdit()触发器运行它

function testFunction(){
var ss=SpreadsheetApp.getActive()
if(ss.getActiveSheet().getRange(“B2”).getValue()!=“”){
var b2='SEARCH(b2,resources!K2:K)}
else{var b2=”“}
if(ss.getActiveSheet().getRange(“B3”).getValue()!=“”){
var b3='SEARCH(b3,resources!L2:L)}
else{var b3=”“}
if(ss.getActiveSheet().getRange(“B4”).getValue()!=“”){
var b4='SEARCH(b4,resources!M2:M)}
else{var b4=”“}
if(ss.getActiveSheet().getRange(“B5”).getValue()!=“”){
var b5='搜索(b5,资源!N2:N)}
else{var b5=”“}
风险值列表=[b2、b3、b4、b5]
var concatenated=list.filter(布尔).join(',');
ss.getActiveSheet().getRange([将公式放在此处]).setFormula('=FILTER(参考资料!C2:C,'+concatenated+))

}
我相信这个函数应该输出您想要的公式,尽管我还没有测试公式本身

您可能希望使用onEdit()触发器运行它

function testFunction(){
var ss=SpreadsheetApp.getActive()
if(ss.getActiveSheet().getRange(“B2”).getValue()!=“”){
var b2='SEARCH(b2,resources!K2:K)}
else{var b2=”“}
if(ss.getActiveSheet().getRange(“B3”).getValue()!=“”){
var b3='SEARCH(b3,resources!L2:L)}
else{var b3=”“}
if(ss.getActiveSheet().getRange(“B4”).getValue()!=“”){
var b4='SEARCH(b4,resources!M2:M)}
else{var b4=”“}
if(ss.getActiveSheet().getRange(“B5”).getValue()!=“”){
var b5='搜索(b5,资源!N2:N)}
else{var b5=”“}
风险值列表=[b2、b3、b4、b5]
var concatenated=list.filter(布尔).join(',');
ss.getActiveSheet().getRange([将公式放在此处]).setFormula('=FILTER(参考资料!C2:C,'+concatenated+))
}