如何防止过滤器隐藏特定的行和标题?



我拿出了以下函数,根据单元格G2中的下拉列表过滤行。但是,它也隐藏了我的标题。伊姆古尔

是否可以从过滤器中免除 D 列中带有"所有站点"的行?无论我从下拉列表中选择什么,我都需要始终显示它。 过滤器前:伊姆古尔

我的目标是实现:在下拉列表中所做的选择将显示所有站点和包含所选内容的行。 示例:从下拉列表中选择了中心 01。D 列中不包括中心 01 的位置将被隐藏。仅显示所有站点的行,并包含中心 01。 伊姆古尔

function hideRow () {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('Risk register'); // the sheet name
var cell2 = sheet.getRange('G2').getValue();
var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains(cell2);
sheet.getFilter().setColumnFilterCriteria(4, criteria);
}

我相信你的目标如下。

  • 您希望将基本过滤器反映到Risk register表上的"D4:D"范围。
  • 您要从单元格"G2"中检索用于搜索的值。
  • 当"G2"的值为"所有站点">
  • 时,您希望在"D"列中显示"所有站点"行。
  • 当"G2"的值为"中心 01"时,您希望在"D"列中显示具有"Hub 01"和"所有站点"的行。

为此,这个答案怎么样?

修改点:

  • 为了将基本筛选器反映到"D4:D"的范围,筛选器设置为"D3:D"的范围。
  • 为了显示具有"Hub 01"和"所有站点"的行,使用自定义公式。
    • 在这种情况下,我引用了这个线程。裁判
  • 为了在选择下拉列表时运行脚本,请使用 OnEdit 事件触发器。
    • 在这种情况下,可以使用简单触发器。

修改后的脚本:

请将以下脚本复制并粘贴到脚本编辑器中并保存。并且,请更改Risk register工作表上单元格" 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 一起使用。

引用:

  • newFilterCriteria((
  • 类筛选条件
  • 类范围的创建过滤器((
  • 简单触发器

最新更新