繁体   English   中英

Google Sheets Scripts - 以管理员/所有者身份运行脚本

[英]Google Sheets Scripts - run scripts as administrator / owner

我有 Google 表格,名称为 TEST https://docs.google.com/spreadsheets/d/1HsRwknyZBmZZ9nibDfNpOwqkVsFGThDyrTwspV-5_4U/edit?usp=sharing

Sheet: Arkusz 1
Column A: all people can edit
Column B: only owner can edit

库(适用于所有人): https : //script.google.com/macros/s/AKfycbzpnEMhIG-0dMp54q3W4UxoT71-lSdfF7Qxf7rq_j6gJMNIxuCS/exec

用户无法添加行,因为它被 B 列阻止,该列仅属于管理员。 如何创建允许用户添加新行的宏?

我有三个脚本:

function insertRow() { 
var ss = SpreadsheetApp.getActive() 
var sheetName = ss.getActiveSheet().getName() 
var row = ss.getActiveRange().getRow() 
var numRows = Browser.inputBox('Insert Rows', 'Enter the number of rows to insert', Browser.Buttons.OK); 
Logger.log(numRows) 
var url ="https://script.google.com/macros/s/AKfycbzpnEMhIG-0dMp54q3W4UxoT71-lSdfF7Qxf7rq_j6gJMNIxuCS/exec" 
var queryString = "?sheetName="+sheetName+"&rowNo="+row+"&noOfRows="+numRows 
url = url + queryString 
Logger.log(url) 
var request = UrlFetchApp.fetch(url) 
if (request != 'Success') 
Browser.msgBox(request) 
}

第二:

function doGet(e) { 
var param = e.queryString 
var parameters = param.split("&") 
// This just checks only 3 parameters are present else gives a invalid link 
if (param != null && parameters.length == 3){ 
param = e.parameter 
var name = param.sheetName 
var row = Number(param.rowNo) 
var numOfRows = Number(param.noOfRows) 
} else{ 
return ContentService.createTextOutput("Invalid query") 
} 
try{ 
var ss = SpreadsheetApp.openById("https://docs.google.com/spreadsheets/d/1HsRwknyZBmZZ9nibDfNpOwqkVsFGThDyrTwspV-5_4U") 
var sheet = ss.getSheetByName(name) 
sheet.insertRowsAfter(row, numOfRows); 
var source_range = sheet.getRange(row,1,1,sheet.getLastColumn()); 
var target_range = sheet.getRange(row+1,1,numOfRows); 
source_range.copyTo(target_range); 
} 
catch (err){ 
return ContentService.createTextOutput("error: "+err) 
}
return ContentService.createTextOutput("Success") 
}

在单击函数 insertRow 并填充行数后,我有 doPost(e) 信息。

你可以帮帮我吗?

在您在下面提供的解决方案中,我看到问题出在mainScript

function mainScript(e) { 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
    // assign the sheet to a variable and use it below instead of spreadsheet
    var sheet = spreadsheet.getSheetByName('ZNC')
    sheet.getRange('A2').activate()   
    sheet.insertRowsBefore(sheet.getActiveRange().getRow(), 1); 
}

嗯,我创建了解决方案,但我认为某处存在错误,因为它没有添加该行,即使一切都正确并且脚本已公开发布。

function ZNCWiersz() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('ZNC'), true);
  const activeSheet = SpreadsheetApp.getActiveSheet().getSheetName();
  const url = ScriptApp.getService().getUrl();
  UrlFetchApp.fetch(`${url}?sheetName=${activeSheet}`, {
    headers: { authorization: "Bearer " + ScriptApp.getOAuthToken() },
  });
// DriveApp.getFiles()  // This is used for automatically detecting the scope of "https://www.googleapis.com/auth/drive.readonly". This scope is used for the access token.
}
// When runScript() is run, this function is run.
const doGet = (e) => ContentService.createTextOutput(mainScript(e));
// This script is run by Web Apps.
function mainScript(e) {
  
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
    spreadsheet.getSheetByName('ZNC')
    spreadsheet.getRange('A2').activate()
    spreadsheet.insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM