【问题标题】:Google Sheets Scripts - run scripts as administrator / ownerGoogle 表格脚本 - 以管理员/所有者身份运行脚本
【发布时间】:2021-07-19 15:05:39
【问题描述】:

我有 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) 信息。

你能帮帮我吗?

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    根据您在下面提供的解决方案,我发现问题出在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); 
    }
    

    【讨论】:

      【解决方案2】:

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

      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);
          
      }
      

      【讨论】:

      • 首先看是你的mainScript有问题。将spreadsheet.getSheetByName('ZNC') 的输出分配给一个变量(例如sheet)并在最后两行使用该变量而不是使用spreadsheet
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多