Google apps script makeCopy Google Drive和异常:拒绝访问:DriveApp。(第xxx行,文件“代码”)

Google apps script makeCopy Google Drive和异常:拒绝访问:DriveApp。(第xxx行,文件“代码”),google-apps-script,Google Apps Script,我有一个脚本,可以为Google工作表中的每一行复制一个文件。它在2020年2月和3月初工作良好。它现在(2020年3月21日)失败,错误为:异常:拒绝访问:DriveApp。(第xxx行,文件“代码”)。请参阅下面代码中的注释,了解代码失败的地方 //global variables to setup rows and columns to check for data var startrow = 5; var endrow = 66; //edit this to be the

我有一个脚本,可以为Google工作表中的每一行复制一个文件。它在2020年2月和3月初工作良好。它现在(2020年3月21日)失败,错误为:异常:拒绝访问:DriveApp。(第xxx行,文件“代码”)。请参阅下面代码中的注释,了解代码失败的地方

//global variables to setup rows and columns to check for data
  var startrow = 5;
  var endrow = 66;  //edit this to be the last row of sheet1 with names or emails in
  var emailcol = 3;
  var idcol = 1;
  var namecol = 2;
  var isPresentCol = 4;

function makeFiles() {

  //Function to make a copy of a file for everyone in a list on a spreadsheet
  //Have the filenames include their names populated from the spreadsheet

  var activeSheet;
  var activeRange;

  //get the active range of teh active sheet
  activeSheet = SpreadsheetApp.getActiveSheet();
  activeRange = SpreadsheetApp.getActiveRange();

  //which file to copy
  filetocopy = activeSheet.getRange(2,2).getValue();
  activeSheet.getRange(2,3).setValue(filetocopy);
  var theFileReference = DriveApp.getFileById(filetocopy);
  var oldFileName = theFileReference.getName();

  //create file for each person - hardcoded rows and columns

  for (var i = startrow; i < endrow + 1; i++) {
    var currentValue = activeSheet.getRange(i, namecol).getValue();
    var newFileName = currentValue + ' - ' + oldFileName;   //change this line if you want to change the filename formatting
    theFileReference.makeCopy(newFileName);   //This is line xxx where the code fails

    //find the fileId of the new file
    var dupFileArray = [];
    var theNewFileReference = DriveApp.getFilesByName(newFileName);
    while(theNewFileReference.hasNext()){
      var file = theNewFileReference.next();
      dupFileArray.push(file.getId());
    };
    activeSheet.getRange(i, 1).setValue(dupFileArray);
  }
}
//设置行和列以检查数据的全局变量
var startrow=5;
var endrow=66//将此编辑为sheet1的最后一行,其中包含姓名或电子邮件
var=3;
var-idcol=1;
var-namecol=2;
var isPresentCol=4;
函数makeFiles(){
//函数为电子表格列表中的每个人制作文件副本
//让文件名包含从电子表格填充的文件名
var-activeSheet;
var活性范围;
//获取活动工作表的活动范围
activeSheet=SpreadsheetApp.getActiveSheet();
activeRange=SpreadsheetApp.getActiveRange();
//复制哪个文件
filetocopy=activeSheet.getRange(2,2.getValue();
activeSheet.getRange(2,3).setValue(filetocopy);
var theFileReference=DriveApp.getFileById(filetocopy);
var oldFileName=theFileReference.getName();
//为每个人创建文件-硬编码行和列
对于(变量i=startrow;i

已向脚本授予适当的范围和授权,并在项目属性中验证。Google是否更改了使用此方法所需的权限?我能做些什么来让这一切顺利进行。我仅在需要时在脚本编辑器中手动触发脚本。提前感谢。

是一个文件失败还是每个文件都失败?您是否有权访问该文件并有权制作该文件的副本?是的,我拥有/创建了原始文件及其应在其中创建的文件夹,因此具有完全权限。我在我的工作和个人谷歌账户上尝试过同样的错误。它在第一次运行时失败,因此不会创建新文件。如果在
for
循环之外运行代码,您可以进行复制吗?@Jescanellas我尝试将代码移到for循环之外,但仍然不起作用。谢谢你的建议。我做了一些测试,但是我不能重现这个问题。如果您已经在使用全驱动器作用域,并且您是文件的所有者,那么您不应该有任何问题。如果您是一个G套件用户,我建议您检查一下他们的问题:it是在一个文件上失败还是在每个文件上失败?您是否有权访问该文件并有权制作该文件的副本?是的,我拥有/创建了原始文件及其应在其中创建的文件夹,因此具有完全权限。我在我的工作和个人谷歌账户上尝试过同样的错误。它在第一次运行时失败,因此不会创建新文件。如果在
for
循环之外运行代码,您可以进行复制吗?@Jescanellas我尝试将代码移到for循环之外,但仍然不起作用。谢谢你的建议。我做了一些测试,但是我不能重现这个问题。如果您已经在使用全驱动器作用域,并且您是文件的所有者,那么您不应该有任何问题。如果你是G套件的用户,我建议你越过他们的