Appscript Google addEdtor(行[5])permission.value错误 [英] Appscript Google addEdtor(row[5]) permission.value error

查看:133
本文介绍了Appscript Google addEdtor(行[5])permission.value错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

工作表:
用户名列表[0]
用户电子邮件列表[5]

运行脚本工作正常除此之外

DriveApp.getFileById('1phsJs4ik2a654645645GOJs4gBVVKd2OmlHtlPk')。makeCopy(sheetName,dest) .addEditor(所有者);

错误:无效参数:permission.value(第21行,文件代码)



当我用'email@google.com'替换'所有者'时工作正常,但我需要它通过列表进行迭代



完整代码:

  //显示已发送。 
var Confirmed =确认;

函数DistributeTemplate(){
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; //第一行数据处理
var指定= SpreadsheetApp.getActiveSpreadsheet()。getSheetByName(Sheet1);
var counter = specify.getRange(A1)。getValue(); //如何做
var numRows = counter; //要处理的行数
var dataRange = sheet.getRange(startRow,1,numRows,5)
var data = dataRange.getValues();
var dest = DriveApp.getFolderById('INSERTFOLDERID');
for(var i = 0; i< data.length; ++ i){
var row = data [i];
var sheetName = row [0]
var FlexisheetSent = row [2];
var owner = row [5];
Logger.log(owner);
if(FlexisheetSent!=确认){//只发送一次
//DriveApp.getFolderById(dest).addEditor(owner);
DriveApp.getFileById('INSERTTEMPLATEIDGOOGLESHEET')。makeCopy(sh eetName,dest).addEditor(owner);
sheet.getRange(startRow + i,3).setValue(Confirmed);
//单元格会立即更新以避免任何问题。
SpreadsheetApp.flush();




解决方案

没有值 row [5]



在这一行:

  var dataRange = sheet.getRange(startRow,1,numRows,5)

getRange() getRange(row,column,numRows,numColumns) code>



给你一个由5个元素组成的数组 [[0,1,2,3,4]] ,但是通过引用索引号引用数组元素,并且数组索引以0开头。



您可能需要更改 var owner = row [5]; to var owner = row [4]; 如果电子邮件位于E列或 var dataRange = sheet.getRange(startRow,1,numRows,5) to var dataRange =工作表。 getRange(startRow,1,numRows,6)如果电子邮件位于电子表格的F列。



还要确保单元格该电子邮件没有前导空格或尾随空格或任何其他特殊字符。


Sheet: list of user's names row[0] list of user emails row[5]

run the script it works fine apart from this line

 DriveApp.getFileById('1phsJs4ik2a654645645GOJs4gBVVKd2OmlHtlPk').makeCopy(sheetName,dest).addEditor(owner);

ERROR: Invalid argument: permission.value (line 21, file "Code")

Works fine when i replace the 'owner' with '"email@google.com"' but i need it to iterate through a list

Full code:

// Showing it has been sent.
var Confirmed = "Confirmed";

function DistributeTemplate() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;  // First row of data to process
var specify = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var counter = specify.getRange("A1").getValue(); //HOW MANY TO DO 
var numRows = counter;   // Number of rows to process
 var dataRange=sheet.getRange(startRow, 1, numRows, 5)
 var data = dataRange.getValues();
 var dest = DriveApp.getFolderById('INSERTFOLDERID');
 for (var i = 0; i < data.length; ++i) {
 var row = data[i];
 var sheetName = row[0]   
 var FlexisheetSent = row[2];   
 var owner = row[5];
 Logger.log(owner);
  if (FlexisheetSent != Confirmed) { //Only send once
    //DriveApp.getFolderById(dest).addEditor(owner);
   DriveApp.getFileById('INSERTTEMPLATEIDGOOGLESHEET').makeCopy(sh eetName,dest).addEditor(owner);
   sheet.getRange(startRow + i, 3).setValue(Confirmed);
     // The cell is updated instantly to avoid any issues.
    SpreadsheetApp.flush();
  }
 }
 }

解决方案

There is no value row[5].

At this line:

var dataRange=sheet.getRange(startRow, 1, numRows, 5)

The configuration of the parameters of the getRange() you're using is: getRange(row, column, numRows, numColumns)

That gets you an Array of 5 elements [[0, 1, 2, 3, 4]], but you refer to an Array element by referring to the index number and Array indexes start with 0.

You either need change your var owner = row[5]; to var owner = row[4]; if the email is in your E column or var dataRange=sheet.getRange(startRow, 1, numRows, 5) to var dataRange=sheet.getRange(startRow, 1, numRows, 6) if the email is in the F column of your Spreadsheet.

Also be sure that the cell that has the email doesn't have leading or trailing whitespaces, or any other special character.

这篇关于Appscript Google addEdtor(行[5])permission.value错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆