google-apps-script - Google Apps 脚本 : Temporarily run script as another user

标签 google-apps-script google-sheets

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

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

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

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

最佳答案

最可行的选择是让一个网络应用程序在需要的地方插入行。您可以通过 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 一次以授予它授权/许可 编辑您的谷歌表格。
由于 webApp 将在您的授权下运行,因此它可以在没有许可的情况下插入 Row。此外,您可以向 get 请求添加唯一 ID(有效用户的电子邮件 ID?),以确保仅处理来自 google 表格脚本中的有效请求。

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

关于google-apps-script - Google Apps 脚本 : Temporarily run script as another user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809202/

相关文章:

javascript - 使用 AppScript/JavaScript 的 HTML 按钮事件

python - 使用 Python 客户端库读取私有(private) Google 电子表格

javascript - 谷歌表格脚本 : How to compare 2 columns to remove duplicates

image - 通过脚本错误删除 Google 表格中的图像

google-apps-script - 按特定顺序对 Google 电子表格单元格求和

google-apps-script - getThreads 的超大标签

javascript - 无法从 Google 脚本返回 2D 数组以在我的 HTML 中使用

javascript - 使用 Google Apps 脚本插入方括号和引号

google-apps-script - 如何使用 for 在 google app script 中对范围求和?

javascript - 通过电子邮件发送时返回空日期字段(Google 电子表格)