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