如何允许非表格所有者运行涉及受保护单元格的脚本
问题:非所有者执行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
相关产品推荐
相关产品推荐

