Google Apps脚本:暂时以另一个用户身份运行脚本

时间:2017-03-15 12:02:13

标签: google-apps-script google-sheets

我有一张Google电子表格,其中包含一些表单,每张表格或我使用&#34保护的表格;除了某些单元格'例行程序,以保护共享用户免受他们不应该编辑的区域。

我还有一个插入行的功能,但由于受到保护,这显然会在作为共享用户运行时失败。

“插入行”功能100%运行,未添加任何保护。

我如何暂时将活跃用户更改为“我”'在脚本运行的同时“删除我”#39;完成后将纸张保持原状还包括所有保护?

1 个答案:

答案 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