多个复选框隐藏列的脚本
Script for multiple Checkboxes hidind columns
我在名为“平台”的 Sheet 上有 8 个复选框。每个未选中的复选框都必须隐藏一组特定的“ROAS”列 Sheet。
复选框位置:
- B4:选中 = 在 'ROAS' 上显示 F、G、H 列/未选中:隐藏 F、G、H 列
- B5:选中 = 在 'ROAS' 上显示 I、J、K 列/未选中:隐藏 I、J、K 列
- B6:选中 = 在 'ROAS' 上显示 L、M、N 列/未选中:隐藏 L、M、N 列
- B7:选中 = 在 'ROAS' 上显示 O、P、Q 列/未选中:隐藏 O、P、Q 列
- B8:选中 = 在 'ROAS' 上显示 R、S、T 列/未选中:隐藏 R、S、T 列
- B9:选中 = 在 'ROAS' 上显示 U、V、W 列/未选中:隐藏 U、V、W 列
- B10:选中 = 在 'ROAS' 上显示 X、Y、Z 列/未选中:隐藏 X、Y、Z 列
- B11:选中 = 在 'ROAS' 上显示 AA、AB、AC 列/未选中:隐藏 AA、AB、AC 列
我找到了一个仅适用于一个复选框的代码,但我无法添加更多复选框:
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}`]);
});
}
}
参考文献:
我在名为“平台”的 Sheet 上有 8 个复选框。每个未选中的复选框都必须隐藏一组特定的“ROAS”列 Sheet。
复选框位置:
- B4:选中 = 在 'ROAS' 上显示 F、G、H 列/未选中:隐藏 F、G、H 列
- B5:选中 = 在 'ROAS' 上显示 I、J、K 列/未选中:隐藏 I、J、K 列
- B6:选中 = 在 'ROAS' 上显示 L、M、N 列/未选中:隐藏 L、M、N 列
- B7:选中 = 在 'ROAS' 上显示 O、P、Q 列/未选中:隐藏 O、P、Q 列
- B8:选中 = 在 'ROAS' 上显示 R、S、T 列/未选中:隐藏 R、S、T 列
- B9:选中 = 在 'ROAS' 上显示 U、V、W 列/未选中:隐藏 U、V、W 列
- B10:选中 = 在 'ROAS' 上显示 X、Y、Z 列/未选中:隐藏 X、Y、Z 列
- B11:选中 = 在 'ROAS' 上显示 AA、AB、AC 列/未选中:隐藏 AA、AB、AC 列
我找到了一个仅适用于一个复选框的代码,但我无法添加更多复选框:
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}`]);
});
}
}