Javascript 如何隐藏选项卡并跨多个工作表保护它们(谷歌工作表)

Javascript 如何隐藏选项卡并跨多个工作表保护它们(谷歌工作表),javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在使用当前功能(触发菜单按钮)隐藏一系列列。我想添加一些脚本来保护这个隐藏区域(这样只有所有者才能编辑) 我的问题是,如何将保护元素添加到此函数,并强制该函数在我的所有选项卡上运行,不包括X、Y、Z等。。。我已经试着让它工作了好几个小时,但似乎无法完全破解它 function hideResults() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); sheet.hi

我正在使用当前功能(触发菜单按钮)隐藏一系列列。我想添加一些脚本来保护这个隐藏区域(这样只有所有者才能编辑)

我的问题是,如何将保护元素添加到此函数,并强制该函数在我的所有选项卡上运行,不包括
X、Y、Z
等。。。我已经试着让它工作了好几个小时,但似乎无法完全破解它

function hideResults() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  sheet.hideColumns(3,27); // B-D, three columns starting from 2nd 
  sheet.hideRows(4,1)
  sheet.hideRows(32,2)
}
说明: 以下代码中可能需要修改两件事:

  • 选择要从此操作中排除的图纸:

    const sheets_to_exclude = ["Sheet2","Sheet4","X","Y"]; 
    
  • 选择要保护的范围:

    const ranges_to_protect = ["C:AC3","C4:AC4","C32:AC33"];
    
代码的其余部分使用循环遍历工作表、范围和类以保护选定的范围

解决方案:
function hideResults() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  //add here the sheets you want to exclude
  const sheets_to_exclude = ["Sheet2","Sheet4","X","Y"]; 
  // add the ranges you want to protect
  const ranges_to_protect = ["C:AC3","C4:AC4","C32:AC33"];
  sheets.forEach(sheet=>{
        if(!sheets_to_exclude.includes(sheet.getName())){
             sheet.hideColumns(3,27); 
             sheet.hideRows(4,1);
             sheet.hideRows(32,2);
             let ranges = sheet.getRangeList(ranges_to_protect).getRanges();
             ranges.forEach(rng=>{           
                let protection = rng.protect();
                let me = Session.getEffectiveUser();
                protection.addEditor(me);
                protection.removeEditors(protection.getEditors());
                if (protection.canDomainEdit()) {
                      protection.setDomainEdit(false);
                };            
             });  
        };
  }); 
}