Mik*_*rne 5 google-sheets google-apps-script spreadsheet-protection
我有一个包含许多工作表的 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")
}
Run Code Online (Sandbox Code Playgroud)
接下来,您将部署一个 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")
}
Run Code Online (Sandbox Code Playgroud)
确保运行一次网络应用程序以授予其编辑您的谷歌表格的授权/权限。由于 webApp 将在您的授权下运行,因此无需权限问题即可插入行。此外,您可以将唯一 ID(有效用户的电子邮件 ID?)添加到获取请求,以确保仅处理来自 google 表格脚本内的有效请求。
如果您想了解有关网络应用程序的更多详细信息,可以在这里找到: https: //developers.google.com/apps-script/guides/web
| 归档时间: |
|
| 查看次数: |
5255 次 |
| 最近记录: |