Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何防止筛选器隐藏特定行和标题?_Google Apps Script_Filter - Fatal编程技术网

Google apps script 如何防止筛选器隐藏特定行和标题?

Google apps script 如何防止筛选器隐藏特定行和标题?,google-apps-script,filter,Google Apps Script,Filter,我用下面的函数根据单元格G2中的下拉列表过滤行。然而,它也隐藏了我的标题 是否可以将D列中包含“所有站点”的行从筛选器中排除?我需要它显示在任何时候,无论我从下拉列表中选择什么。过滤前: 我的目标是实现:在下拉列表中所做的选择将显示所有站点以及包含所选内容的行。示例:已从下拉列表中选择Hub 01。列D中不包括轮毂01的位置将被隐藏。仅显示所有站点的行并包含Hub 01。 我相信你的目标如下 您希望将基本过滤器反映到风险登记表上的“D4:D”范围内 您希望从单元格“G2”中检索用于搜索的值

我用下面的函数根据单元格G2中的下拉列表过滤行。然而,它也隐藏了我的标题

是否可以将D列中包含“所有站点”的行从筛选器中排除?我需要它显示在任何时候,无论我从下拉列表中选择什么。过滤前:

我的目标是实现:在下拉列表中所做的选择将显示所有站点以及包含所选内容的行。示例:已从下拉列表中选择Hub 01。列D中不包括轮毂01的位置将被隐藏。仅显示所有站点的行并包含Hub 01。


我相信你的目标如下

  • 您希望将基本过滤器反映到
    风险登记表
    上的“D4:D”范围内
  • 您希望从单元格“G2”中检索用于搜索的值
  • 当“G2”的值为“所有站点”时,您希望在“D”列中显示“所有站点”的行
  • 当“G2”的值为“Hub 01”时,您希望在“D”列中显示包含“Hub 01”和“所有站点”的行
对于这个问题,这个答案如何

修改点:
  • 为了将基本滤波器反映到“D4:D”范围内,将滤波器设置到“D3:D”范围内
  • 为了显示包含“Hub 01”和“All site”的行,使用自定义公式。
    • 在本例中,我引用了此线程
  • 为了在选择下拉列表时运行脚本,将使用OnEdit事件触发器。
    • 在这种情况下,可以使用简单触发器
修改脚本: 请将以下脚本复制粘贴到脚本编辑器并保存。并且,请更改
风险登记表
上单元格“G2”下拉列表的值。这样,脚本就可以运行了

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() == "Risk register" && range.getA1Notation() == "G2") {
    const value = e.value;
    let criteria = SpreadsheetApp.newFilterCriteria();
    criteria = value.toLowerCase() == "all site"
      ? criteria.whenTextEqualTo(value)
      : criteria.whenFormulaSatisfied(`=REGEXMATCH(D4,"All site|${value}")`);
    const sheetFilter = sheet.getFilter();
    if (sheetFilter) sheetFilter.remove();
    sheet.getRange("D3:D").createFilter().setColumnFilterCriteria(4, criteria.build());
  }
}
注:
  • 此脚本由OnEdit事件触发器运行。因此,当脚本编辑器直接运行
    onEdit()
    函数时,会发生错误。请小心这个
  • 请将此脚本与V8一起使用
参考资料:

谢谢你的帮助。当从下拉列表中选择“所有站点”时,是否可以显示所有行?@sherry_03hotmailcom感谢您的回复。我深表歉意,我的回答不是你期望的结果。当您想在单元格“G2”中按
all site
的值显示所有行时,作为一个简单的修改,从
行进行修改怎么样?标准。当扩展到(值)
时?标准
?这样,所有行都显示出来。@sherry_03hotmailcom欢迎您。谢谢你让我知道。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。道歉。我不熟悉堆栈溢出,没有看到您提到的按钮。如果你不介意的话,你能告诉我如何接受这个答案吗?@Sherry谢谢你的回答。给您带来不便,我深表歉意。你可以看到如何接受你的答案。
function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() == "Risk register" && range.getA1Notation() == "G2") {
    const value = e.value;
    let criteria = SpreadsheetApp.newFilterCriteria();
    criteria = value.toLowerCase() == "all site"
      ? criteria.whenTextEqualTo(value)
      : criteria.whenFormulaSatisfied(`=REGEXMATCH(D4,"All site|${value}")`);
    const sheetFilter = sheet.getFilter();
    if (sheetFilter) sheetFilter.remove();
    sheet.getRange("D3:D").createFilter().setColumnFilterCriteria(4, criteria.build());
  }
}