我有一张Google电子表格,其中包含一些表单,每张表格或我使用&#34保护的表格;除了某些单元格'例行程序,以保护共享用户免受他们不应该编辑的区域。
我还有一个插入行的功能,但由于受到保护,这显然会在作为共享用户运行时失败。
“插入行”功能100%运行,未添加任何保护。
我如何暂时将活跃用户更改为“我”'在脚本运行的同时“删除我”#39;完成后将纸张保持原状还包括所有保护?
答案 0 :(得分:1)
最可行的选择是让Web App在需要的位置插入行。您可以通过get或post方法传递工作表名称和行号。以下方法使用get方法。 你的谷歌脚本看起来像这样:
function insertRow() {
var ss = SpreadsheetApp.getActive()
var sheetName = ss.getActiveSheet().getName()
var row = ss.getActiveRange().getRow()
// Below URL is the link to web App, you will generate it by publish >Deploy as web app. Code for Web app is below.
var url ="Put the generated URL here"
var queryString = "?sheetName="+sheetName+"&rowNo="+row
url = url + queryString
Logger.log(url)
var request = UrlFetchApp.fetch(url)
if (request != 'Success')
Browser.msgBox("Sorry Unable to insertRow")
}
接下来,您将部署一个Web应用程序,它将处理获取请求并向工作表添加新行。代码如下所示:
function doGet(e) {
var SheetID = "Your Sheet ID here"
var param = e.queryString
var parameters = param.split("&")
// This just checks only 2 parameters are present else gives a invalid link
if (param != null && parameters.length == 2){
param = e.parameter
var name = param.sheetName
var row = Number(param.rowNo)
} else {
return ContentService.createTextOutput("Failed")
}
try{
var ss = SpreadsheetApp.openById(sheetID)
var sheet = ss.getSheetByName(name)
sheet.insertRowAfter(row)
sheet.getRange(row + 1,1).setValue("Inserted Row")
}
catch (err){
return ContentService.createTextOutput("Failed")
}
return ContentService.createTextOutput("Success")
}
确保运行webApp一次以授予其权限以编辑您的Google工作表。 由于webApp将在您的授权下运行,因此可以在不发出权限的情况下插入Row。此外,您可以向get请求添加唯一ID(有效用户的电子邮件ID?),以确保只处理来自Google工作表脚本中的有效请求。
如果您想了解有关网络应用的更多详情,请访问:https://developers.google.com/apps-script/guides/web