将查询功能放入可以通过按钮激活的脚本中

问题描述 投票:0回答:1

我正在搜索页面上查找我的团队使用查询功能填写的通话记录。使事情变得复杂的是,在这些板子的帮助下,我能够生成以下功能,并且运行良好

Iferror(QUERY({'Jan 2020'!A3:R5000;'Feb 2020'!A3:R5000;'Mar 2020'!A3:R5000}, "select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18 WHERE "&TEXTJOIN(" and ", 1,IF(B5<>"", "Col1 >= date '"&B6&"'", ),IF(C5<>"", "Col1 <= date '"&C6&"'", ),IF(D5<>"", "Col3 = '"&D5&"'", ),IF(E5<>"", "Col4 = '"&E5&"'", ),IF(F5<>"", "Col5 = '"&F5&"'", ),IF(B8<>"", "Col6 = '"&B8&"'", ),IF(C8<>"", "Col9= '"&C8&"'", ),IF(D8<>"", "Col10= '"&D8&"'", ),
IF(E8<>"", "Col11= '"&E8&"'", )),1),"No Match")

我遇到的问题是我希望能够填写“搜索”区域,然后按一个按钮以激活要运行的功能。现在,每次我更改一个搜索词时,页面都会随着每次更改而更新。因此,如果要更改3个搜索范围,则必须等待工作表针对每次更改进行更新。如您所见,我们的团队平均每个月大约有4000次通话,因此读取脚本可能很耗时。

我以为我可以将查询简单地放入一个Scrip中,并通过“搜索”按钮激活该脚本。

我对脚本编写还相当陌生,并且对我在网上找到的内容感到困惑,因为在我看来,他们需要从头开始使用脚本语言来构建函数。

有没有一种方法可以简单地编写脚本来激活功能?

[我当时想将功能粘贴到需要激活它的单元格中,然后将清晰的脚本设置为“重置搜索”按钮是可能的。

search google-apps-script google-sheets google-sheets-query
1个回答
0
投票

答案:

您可以创建两个功能,并将它们分配给“搜索”和“清除”按钮。一种将公式粘贴到工作表中,另一种将公式替换为返回值的显示值。

代码:

首先,在脚本中创建两个函数,根据需要更改单元格和工作表名称字符串。

function searchFormula() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName("Copy of Exm") // change for the sheet name
  var cell = sheet.getRange("A17") // change for the cell the function should be in

  var formula = "Iferror(QUERY({'Jan 2020'!A3:R5000;'Feb 2020'!A3:R5000;'Mar 2020'!A3:R5000}, \"select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18 WHERE \"&TEXTJOIN(\" and \", 1,IF(B5<>\"\", \"Col1 >= date '\"&B6&\"'\", ),IF(C5<>\"\", \"Col1 <= date '\"&C6&\"'\", ),IF(D5<>\"\", \"Col3 = '\"&D5&\"'\", ),IF(E5<>\"\", \"Col4 = '\"&E5&\"'\", ),IF(F5<>\"\", \"Col5 = '\"&F5&\"'\", ),IF(B8<>\"\", \"Col6 = '\"&B8&\"'\", ),IF(C8<>\"\", \"Col9= '\"&C8&\"'\", ),IF(D8<>\"\", \"Col10= '\"&D8&\"'\", ),\r\nIF(E8<>\"\", \"Col11= '\"&E8&\"'\", )),1),\"No Match\")"

  cell.setFormula(formula);

}

function clearFormula() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName("Copy of Exm")

  // in the following line the 17 and the 1 should be replaced with the 
  // corresponding cell from the searchFormula() function
  // for example A17 should be .getRange(17, 1 ...)
  // and cell B20 should be .getRange(20, 2 ...) etc
  var range = sheet.getRange(17, 1, sheet.getLastRow() - 1, sheet.getLastColumn() - 1)

  range.setValues(range.getDisplayValues());  
}

然后您可以将脚本分配给工作表用户界面中的按钮。

希望对您有帮助!

参考:

© www.soinside.com 2019 - 2024. All rights reserved.