使用复选框通过应用程序脚本显示和隐藏工作表

Using checkboxes to show and hide sheets with apps script

我想使用 5 个复选框来隐藏 (false) 和显示 (true) 工作表。我的印象是 onEdit 无法做到这一点。有人能帮我解决这个问题吗?非常感谢你的帮助。郭敬明

这段代码对我有用:

function onEdit(e) {
  const sheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');
  const targetRange =  '{"columnEnd":1,"columnStart":1,"rowEnd":1,"rowStart":1}';
  if (JSON.stringify(e.range) !== targetRange) return; // validate that the right checkbox is checked
  if(e.value === 'TRUE') return sheet.hideSheet();
  return sheet.showSheet();
}

不过请确保您的触发器设置正确。并且您可能想像我一样做更好的范围验证,但这只是为了演示目的:)

像这样:

function onEdit(e) {
  const name = e.source.getActiveSheet().getName();
  if (name != 'Sheet1') return; // name of the first sheet
  const col = e.range.columnStart;
  if (col != 1) return;
  const row = e.range.rowStart;
  const value = e.range.getValue();
  const sheet = e.source.getSheets()[row]; // row1 is sheet[1], row2 is sheet[2], etc
  const _ = (value) ? sheet.showSheet() : sheet.hideSheet();
}  

更新版本

Show/hide sheet你可以通过它的名字这样:

function onEdit(e) {
  const name = e.source.getActiveSheet().getName();
  if (name != 'Sheet1') return;
  const col = e.range.columnStart;
  if (col != 1) return;
  const value = e.range.getValue();
  const name_to_hide = e.range.offset(0,1).getValue(); // get a name
  const sheet = e.source.getSheetByName(name_to_hide);
  const _ = (value) ? sheet.showSheet() : sheet.hideSheet();
}  

它从下一列中取一个名称(在本例中为 'B'),并且 show/hides 使用此名称的 sheet。

或者,如果您不想在 'B' 列中显示 sheet 个名称,您可以使用 Dmitry Kostyuk 的解决方案。这样您就可以在脚本中连接名称。