谷歌表 - 使用谷歌应用程序脚本保护表并取消保护所有非公式

时间:2021-04-02 17:36:22

标签: google-apps-script google-sheets range

我是 Google Apps 脚本的新手,正在尝试编写脚本来执行以下操作:

  1. 保护活动工作表,然后在该工作表上的指定范围内:
  2. 确定所有“公式单元格/范围”(以及“非公式单元格/范围”),然后
  3. 取消保护非公式范围[]

这是我目前正在使用的(请参阅我遇到的部分)

function protectFormulas() {

// DEFINE WORKSHEET
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ws = ss.getActiveSheet();
  
// PROTECT ACTIVE SHEET
    var protection = ws.protect().setDescription('Protect Fomulas');
  
// Establish Range and Formulas within [currently my range is the entire sheet]
    var range = ws.getDataRange();
    var formulas = range.getFormulas();  
    
// *****THIS IS WHERE I'M STUCK - how to determine the Range[] Array within "Formulas" ??  [aka ignore the notes]
    //var result = new Array(formulas.length)
    //for (var i = 0; i < formulas.length; i++) {
        //IF formulas [i] is blank
            //add formulas R1C1 to Result Array [how to?]
        //ELSE
            // do nothing
    //}
//  *****END OF WHERE I'M STUCK


// UNPROTECT select Ranges  
  var unprotected = ws.range;
  protection.setUnprotectedRanges(result);

  }

请帮忙!

1 个答案:

答案 0 :(得分:2)

function protectFormulas() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  let up = [];
  let protection=sh.protect();
  const range = sh.getDataRange();
  const formulas = range.getFormulas();
  formulas.forEach((r, i) => {
    r.forEach((c, j) => {
      if (c == '') {//if not a formula then add range to up
         up.push(sh.getRange(i+1,j+1));
      }
    });
  });
  protection.setUnprotectedRanges(up);//unprotect ranges in up
}