You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何允许非表格所有者运行涉及受保护单元格的脚本

问题:非所有者执行Google Apps脚本无法编辑受保护单元格

我编写了一段Google Apps脚本,表格中部分包含公式的单元格被设置为受保护。作为表格所有者,我通过按钮关联脚本后可以正常更新这些受保护单元格的值,但非所有者执行脚本时会弹出报错提示:"You are editing protected cells...."。

我尝试将脚本部署为Web App并设置始终以所有者身份运行,但该方案不符合我的使用场景,仅完成了部分设置。我的代码如下:

// Save Data
function submitData() {
 
 var SPREADSHEET_NAME = "Data";
 var SEARCH_COL_IDX = 0;
 var RETURN_COL_IDX = 0;
    
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Tool"); //Form Sheet
  var datasheet = ss.getSheetByName("Data"); //Data Sheet
  
  var str       = formSS.getRange("A10").getValue();
  var values    = ss.getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    if (row[SEARCH_COL_IDX] != str ) {
        //SpreadsheetApp.getUi().alert(' "Dmp #' + formSS.getRange("A4").getValue() + '  "');
       // return row[RETURN_COL_IDX];

    //} else  {

     //Input Values
     var values1 = [[formSS.getRange("A10").getValue(),
                 formSS.getRange("B10").getValue(),
                 formSS.getRange("C10").getValue(),
                 formSS.getRange("D10").getValue(),
                 formSS.getRange("E10").getValue(),
                 formSS.getRange("F10").getValue(),
                 formSS.getRange("G10").getValue(),
                 formSS.getRange("H10").getValue(),
                 formSS.getRange("I10").getValue(),
                 formSS.getRange("J10").getValue(),
                 formSS.getRange("K10").getValue()]];

     var values2 = [[formSS.getRange("A10").getValue(),
                 formSS.getRange("B10").getValue(),
                 formSS.getRange("C10").getValue(),
                 formSS.getRange("D10").getValue(),
                 formSS.getRange("E10").getValue(),
                 formSS.getRange("F10").getValue(),
                 formSS.getRange("G10").getValue(),
                 formSS.getRange("I10").getValue(),
                 formSS.getRange("J10").getValue(),
                 formSS.getRange("K10").getValue()]];


    values2[0].forEach(function(val) {
   if (val === "") { 
     throw new Error("Please fill in Project, Category, Subsystem, Description and Created By Fields.");
    }
})           
   
     // Save New Data
     
     datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 11).setValues(values1);
     SpreadsheetApp.getUi().alert(' New Record Created ');
  
    
     formSS.getRange("D10").clearContent();
     formSS.getRange("E10").clearContent();
     formSS.getRange("F10").clearContent();
     formSS.getRange("G10").clearContent();
     formSS.getRange("H10").clearContent();
     formSS.getRange("I10").clearContent();
     formSS.getRange("J10").setValue(new Date())

      return row[RETURN_COL_IDX];
    }
 
  }
}
//=========================================================

// Clear form

function clearCell() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Tool"); //Form Sheet
  
    
  
  formSS.getRange("D10").clearContent();
  formSS.getRange("E10").clearContent();
  formSS.getRange("F10").clearContent();
  formSS.getRange("G10").clearContent();
  formSS.getRange("I10").clearContent();
  formSS.getRange("J10").setValue(new Date())
  return true ;
  
}

//=====================================================================

var SPREADSHEET_NAME = "Data";
var SEARCH_COL_IDX = 0;
var RETURN_COL_IDX = 0;

function searchStr() {
  
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Tool"); //Form Sheet
  
  var str       = formSS.getRange("F4").getValue();
  var values    = ss.getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    if (row[SEARCH_COL_IDX] == str) {
     
      
      formSS.getRange("A6").setValue(row[0]) ;
      formSS.getRange("B6").setValue(row[1]);
      formSS.getRange("C6").setValue(row[2]);
      formSS.getRange("D6").setValue(row[3]);
      formSS.getRange("E6").setValue(row[4]);
      formSS.getRange("F6").setValue(row[5]);
      formSS.getRange("G6").setValue(row[6]);
      formSS.getRange("H6").setValue(row[7]);
      formSS.getRange("I6").setValue(row[8]);
      formSS.getRange("J6").setValue(row[9]);
      
           
      return row[RETURN_COL_IDX];
      
    }
  }
}

//===================================================================

function rowDelete() {
  
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Tool"); //Form Sheet
  var datasheet = ss.getSheetByName("Data"); //Data Sheet
 
  
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert(
  'Are you sure you want to delete this record?',
  ui.ButtonSet.YES_NO);

 // Process the user's response.
 if (response == ui.Button.YES) {
   
   var str       = formSS.getRange("F4").getValue();
  var values    = ss.getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    if (row[SEARCH_COL_IDX] == str) {
    var  INT_R = i+1
      
    datasheet.deleteRow(INT_R) ;
      
    formSS.getRange("A6").clearContent();
    formSS.getRange("B6").clearContent();
    formSS.getRange("C6").clearContent();
    formSS.getRange("D6").clearContent();
    formSS.getRange("E6").clearContent();
    formSS.getRange("F6").clearContent();
    formSS.getRange("G6").clearContent();
    formSS.getRange("H6").clearContent(); 
    formSS.getRange("I6").clearContent(); 
    formSS.getRange("J6").clearContent(); 
      
     return row[RETURN_COL_IDX];
    }
    
  }
 } 
  
}

//====================================================================

function updateData() {

  var SPREADSHEET_NAME = "Data";
  var SEARCH_COL_IDX = 0;
  var RETURN_COL_IDX = 0;
  
   var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Tool"); //Form Sheet
  var datasheet = ss.getSheetByName("Data"); //Data Sheet
  
 
  var str       = formSS.getRange("A6").getValue();
  var values    = ss.getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    if (row[SEARCH_COL_IDX] == str) {
     var INT_R = i+1
      formSS.getRange("J6").setValue(new Date())
      
      var values1 = [[formSS.getRange("A6").getValue(),
                 formSS.getRange("B6").getValue(),
                 formSS.getRange("C6").getValue(),
                 formSS.getRange("D6").getValue(),
                 formSS.getRange("E6").getValue(),
                 formSS.getRange("F6").getValue(),
                 formSS.getRange("G6").getValue(),
                 formSS.getRange("H6").getValue(),
                 formSS.getRange("I6").getValue(),
                 formSS.getRange("J6").getValue()]];

      var values2 = [[formSS.getRange("A6").getValue(),
                 formSS.getRange("B6").getValue(),
                 formSS.getRange("C6").getValue(),
                 formSS.getRange("D6").getValue(),
                 formSS.getRange("E6").getValue(),
                 formSS.getRange("F6").getValue(),
                 formSS.getRange("G6").getValue(),
                 formSS.getRange("I6").getValue(),
                 formSS.getRange("J6").getValue()]];

                 values2[0].forEach(function(val) {
   if (val === "") { 
     throw new Error("Please fill in Revisions, Project, Category, Subsystem, Description and Updated By Fields.");
    }
}) 
datasheet.getRange(INT_R, 1, 1, 10).setValues(values1);
                  formSS.getRange("A6").clearContent();
                  formSS.getRange("B6").clearContent();
                  formSS.getRange("C6").clearContent();
                  formSS.getRange("D6").clearContent();
                  formSS.getRange("E6").clearContent();
                  formSS.getRange("F6").clearContent();
                  formSS.getRange("G6").clearContent();
                  formSS.getRange("H6").clearContent(); 
                  formSS.getRange("I6").clearContent();
                  formSS.getRange("J6").clearContent();
                  formSS.getRange("E4").clearContent();
       SpreadsheetApp.getUi().alert(' Record Updated ');
      return row[RETURN_COL_IDX];
    }
  }
}

内容的提问来源于stack exchange,提问作者Sam.Palf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:01:38