多个复选框隐藏列的脚本

Script for multiple Checkboxes hidind columns

我在名为“平台”的 Sheet 上有 8 个复选框。每个未选中的复选框都必须隐藏一组特定的“ROAS”列 Sheet。

复选框位置:

我找到了一个仅适用于一个复选框的代码,但我无法添加更多复选框:

function onEdit(e) {
  var spreadsheet = e.source;
  var range = e.range;
  var value = e.value;
  // if sheet name is 'Platforms' and edited cell is 'B4'
  if(spreadsheet.getSheetName() == 'Platforms' && range.getRow() == 4 && range.getColumn() == 2) {
    sheet = spreadsheet.getSheetByName('ROAS');
    if(value == "FALSE") {
      // Hide columns
      sheet.hideColumns(6, 3); // F-H
   
    }
    else {
      sheet.showColumns(6, 3); // F-H
    }
  }
}

你的情况,下面的修改怎么样?在这个修改中,首先,创建一个用于搜索复选框范围和要显示或隐藏的列的对象。并且,使用该对象管理“ROAS”sheet 的列。

修改后的脚本 1:

本次修改,仅确认编辑单元格的复选框。

function onEdit(e) {
  const obj = {};
  let r = 4;
  let c = 6;
  for (let i = 1; i <= 8; i++) {
    obj[`B${r++}`] = [c, 3];
    c += 3;
  }
  var spreadsheet = e.source;
  var range = e.range;
  var a1Notation = range.getA1Notation();
  if (spreadsheet.getSheetName() == 'Platforms' && Object.keys(obj).includes(a1Notation)) {
    spreadsheet.getSheetByName('ROAS')[range.isChecked() ? "showColumns" : "hideColumns"](...obj[a1Notation]);
  }
}

修改脚本 2:

本次修改,确认“B4:B11”单元格的复选框。

function onEdit(e) {
  const obj = {};
  let r = 4;
  let c = 6;
  for (let i = 1; i <= 8; i++) {
    obj[`B${r++}`] = [c, 3];
    c += 3;
  }
  var spreadsheet = e.source;
  var range = e.range;
  var a1Notation = range.getA1Notation();
  if (spreadsheet.getSheetName() == 'Platforms' && Object.keys(obj).includes(a1Notation)) {
    range.getSheet().getRange("B4:B11").getValues().forEach(([b], i) => {
      spreadsheet.getSheetByName('ROAS')[b === true ? "showColumns" : "hideColumns"](...obj[`B${i + 4}`]);
    });
  }
}

参考文献: