使用复选框通过应用程序脚本显示和隐藏工作表
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 的解决方案。这样您就可以在脚本中连接名称。
我想使用 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 的解决方案。这样您就可以在脚本中连接名称。