Google Sheet - 根据单元格值而不是行号自动隐藏行

Google Sheet - Automatically hiding rows based on a cell value instead of a row number

我在应用程序脚本中创建了一个自定义菜单,其中包含 3 个子菜单:

  1. 隐藏一组特定的行
  2. 隐藏另一组行
  3. 取消隐藏所有内容

基本上,人们可以单击其中任何一个以获得更好的可见性。 我当前脚本的问题是,如果我放置过滤器,行将不会与我想隐藏的行匹配...

是否有任何方法可以根据其中一个单元格的值而不是行号来隐藏行? 这样无论我们过滤什么数据,所需的行都会保持隐藏状态。

下面我认为需要更改的部分代码:

function hideRowsC() {
  const obj = [{ sheetName: "Keyword Report", hide: [3,7,20,25,37,43,49,53,57,60,68,77 ] }];
  sample_(obj);
}

下面是我的完整脚本,如果它有助于解决我的问题。

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom View')
    .addItem('Keywords Only', 'hideRowsC')
    .addItem('Categories Only', 'hideRowsK')
    .addItem('View all', 'showRows')
    .addToUi();
}

function showRows() {
  const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  showRowsInAllSheets_(sheets);
}

function hideRowsC() {
  const obj = [{ sheetName: "Keyword Report", hide: [3,7,20,25,37,43,49,53,57,60,68,77 ] }];
  sample_(obj);
}

function hideRowsK() {
  const obj = [{ sheetName: "Keyword Report", hide: [4,5,6,8,19,24,26,27,28,50,52,58,59,61,76,80,81,82 ] }];
  sample_(obj);
}

function sample_(obj) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  showRowsInAllSheets_(sheets);
  const sheetObj = sheets.reduce((o, s) => (o[s.getSheetName()] = s, o), {});
  obj.forEach(({ sheetName, hide }) => {
    if (sheetObj[sheetName]) {
      hide.forEach(h => sheetObj[sheetName].hideRows(h, 1));
    }
  });
}

function showRowsInAllSheets_(sheets) {
  sheets.forEach(s => s.showRows(1, s.getMaxRows()));
}

我相信你的目标如下。

  • Is there any ways to hide rows based on the value of one of the cell instead of row number? 开始,您想通过检查特定列的值来隐藏行。

这样的话,下面的修改怎么样?

修改后的脚本:

本次修改修改了hideRowsCsample_的功能。关于const obj = [{ sheetName: "Keyword Report", checkCol: 1, checkValue: "sample" }],在本例中,检查“A”列的值是否为sample。并且,“A”列的值为 sample 的行被隐藏。

function hideRowsC() {
  const obj = [{ sheetName: "Keyword Report", checkCol: 1, checkValue: "sample" }];
  sample_(obj);
}

function sample_(obj) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  showRowsInAllSheets_(sheets);
  const sheetObj = sheets.reduce((o, s) => (o[s.getSheetName()] = s, o), {});
  obj.forEach(({ sheetName, checkCol, checkValue }) => {
    const s = sheetObj[sheetName];
    if (s) {
      s.getRange(1, checkCol, s.getLastRow()).getDisplayValues().forEach((e, i) => {
        if (e == checkValue) s.hideRows(i + 1, 1);
      });
    }
  });
}
  • 在您的脚本中,请修改hideRowsK,与上述修改相同。