【问题标题】:Google Apps Script: Temporarily run script as another userGoogle Apps 脚本:临时以其他用户身份运行脚本
【发布时间】:2017-03-15 12:02:13
【问题描述】:

我有一个包含许多工作表的 Google 电子表格,每个工作表或我已使用“除了某些单元格”例程进行保护,以保护共享用户免受不应编辑的区域的影响。

我还有一个插入行的功能,但是由于保护,这在以共享用户身份运行时显然会失败。

插入行功能 100% 工作,没有添加保护。

如何在脚本运行时将活动用户临时更改为“我”,然后在完成后将工作表保持在原始状态(包括所有保护)?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    最可行的选择是让网络应用程序在需要的位置插入行。您可以通过 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 应用程序,该应用程序将处理 get 请求并向工作表添加新行。代码如下所示:

    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。此外,您可以在获取请求中添加唯一 ID(有效用户的电子邮件 ID?),以确保仅处理来自 google 表格脚本中的有效请求。

    如果您想了解有关网络应用程序的更多详细信息,可以在此处找到:https://developers.google.com/apps-script/guides/web

    【讨论】:

    • 当我运行 WebApp 代码进行授权时,我收到包含“var param = e.queryString”的行的错误。
    • 是的,这很正常
    • 错误是因为您还没有将任何名为 e 的参数传递给它
    • 当你第一次运行它时,你是否得到一个对话框,要求你授予编辑谷歌表格的权限?如果是,则它已被授权。
    • @Trimax 我认为问题是,即使是匿名用户也需要设置网络应用程序才能运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多