javascript - 学生成绩簿。由于 "Access denied: DriveApp"无法完成脚本

标签 javascript pdf google-sheets google-drive-api

我的脚本从工作表“学生”中提取了 35 个学生姓名。然后找到带有他们名字的正确文件夹(即“Smith Peter”),删除带有旧成绩的旧 pdf 文档(即“Smith Peter.pdf”)并将新制作的 pdf 保存到文件夹(“Smith Peter”)具有新等级的文档('Smith Peter.pdf')。并去从列表中带走另一个学生。

问题:在 1、2 或 3 次迭代后,脚本停止显示:访问被拒绝:DriveApp。 (第 22 行,文件“代码”:files.next().setTrashed(true);)。一周前脚本运行没有问题,我尝试更改名称、文件夹、目标、源表并检查这里的建议。但没有成功。我不知道第22行有什么问题。请帮忙!

附上代码

Execution transcript (显示脚本停止的位置)

function generatePdf() {

var report = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Gradebook ready to save as pdf
var zasobnik = SpreadsheetApp.openById('1eygLDH0iJoXfcVOMIin0hnKpMF59HszmXZosPKvwYWc');  
var zasobsheet = zasobnik.getSheetByName("Studenti"); // list of 35 students with names, Folder IDs
var data = zasobsheet.getDataRange().getValues(); 
  
for (var i = 1; i < data.length; i++){
    report.getRange('B2').setValue(data[i][0]); // setting student's name in a gradebook (first column)
    report.getRange('B3').setValue(' '); // just to jump from B2 to B3
  
var pdf = DriveApp.getFileById('1WHwm7xK28Orj22RxaKWEsCl3UWvWxYUhRg4ZGf87-GQ'); // ID of Gradebook (IF of ActiveSpreadsheet)
var theBlob = pdf.getBlob().getAs('application/pdf').setName(data[i][0] + ".pdf");
var folder = DriveApp.getFolderById(data[i][2]); // third column
  
var files = DriveApp.getFilesByName(data[i][0] + ".pdf"); // pdf with old grades
      while (files.hasNext()) {    
       files.next().setTrashed(true);    
   }
var newFile = folder.createFile(theBlob); // creating pdf with new grades in the student's folder
 
 }
}

最佳答案

经过几次实验,我找到了问题的根源,但没有找到解决方案。 “访问被拒绝”的问题与以下事实有关,即我不是我的脚本创建的文件的所有者并且只有文件的所有者可以删除或删除文件。虽然我是脚本的作者并且对放置在我的驱动器上的文件具有编辑权限,但它不起作用。另一方面,我可以毫无问题地手动删除/删除文件(这对我来说是一种误导)。

经验教训:如果您允许其他人使用您的脚本来创建新文件并破坏旧文件,那么下次您可能无法完成您的脚本,因为您不被允许(访问被拒绝) 将其他用户创建的文件丢弃(尽管该文件是在您自己的驱动器上创建的!)。

调整后的问题:有没有人知道如何编写脚本来删除/删除我不是其所有者(但我有编辑权限)并且由其他用户在我的网站上创建的文件开车?

关于javascript - 学生成绩簿。由于 "Access denied: DriveApp"无法完成脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920379/

相关文章:

javascript - Uncaught ReferenceError : handleClick is not defined - React

java - 如何使用pdfbox读取pdf文档的当前页码

javascript - 在表单提交时触发 Google 电子表格功能时遇到问题

google-apps-script - 如何在 Google Sheets 中获取单元格的字体颜色?

javascript - 使用 socket.on 处理程序之外的数据

javascript - 自动滚动页面+关闭侧边栏菜单项选择后+链接菜单项与部分ID(Wordpress - Jquery)

python - 将裁剪图像的文件夹填充到最大宽度

google-apps-script - 有没有办法以编程方式删除多个工作表中的行?

javascript - Javascript中未定义和未定义之间的区别

pdf - 为什么这个 postscript 计算器(类型 4)在高倍率下的渲染速度如此之慢?