尝试删除文件时访问被拒绝了Drive App

时间:2017-07-06 21:27:05

标签: google-apps-script google-drive-api

我写了一个小脚本,将我的google驱动器中的所有.xls.xlsx文件转换为Google工作表。但是,脚本的结果非常不可靠,有时我会在代码的某些随机部分出现错误,并说:"我们很抱歉,发生了服务器错误。请稍等一下再试一次。"。有时候我会收到一条错误说“#34; Access denied Drive App"在我尝试删除已转换的.xls.xlsx文件的行上。我已为Drive API启用了高级Google服务。

function convertFolder(folder){
  Logger.log('Folder name '+folder.getName());
  var files = folder.searchFiles('(title contains ".xlsx" or title contains ".xls") and (not title contains ".~lock")');
  while(files.hasNext()){
    var xFile = files.next();
    var name = xFile.getName().replace(/\.[^/.]+$/, "");
    Logger.log('File name '+name);
    if (name.indexOf(".~lock")!=-1)
      continue; //for some reason the "and (not title contains ".~lock")" didn't do the trick - why!?!
    var parents = xFile.getParents();
    var parents_arr = new Array();
    while (parents.hasNext()){
      parents_arr.push({'kind':"drive#fileLink",'id':parents.next().getId()});
    }

    var ID = xFile.getId();
    var xBlob = xFile.getBlob();
    var newFile = { title : name+'.gsheet',key : ID, parents: parents_arr, mimeType: "application/vnd.google-apps.spreadsheet"};
    file = Drive.Files.insert(newFile, xBlob, {convert: true});
    xFile.setTrashed(true);
  }
  var folders = folder.getFolders();
  while (folders.hasNext())
    convertFolder(folders.next());
}

function convertAllExcel(){
  var folders = DriveApp.getFoldersByName('Data');
  while (folders.hasNext()){
    var folder = folders.next();
    convertFolder(folder);
  }
  SpreadsheetApp.getUi().alert("done");
}

2 个答案:

答案 0 :(得分:1)

我怀疑你正在达到速率限制。如果您快速连续执行超过20次写入操作(创建,更新,删除),则需要将请求限制为大约每1.5秒一次。

您可能正在考虑" wtf",但这严重意味着您可以通过云端硬盘实现最大吞吐量。

答案 1 :(得分:1)

我有类似的问题!在运行以主要用户身份登录的脚本时,似乎没有最大的吞吐量限制,请与其他用户共享文档,并让他们运行在其他用户的驱动器中执行写操作的脚本。 'Utilities.sleep(1500);'帮了我大忙。

delFolder = DriveApp.getFolderById("folder_id") 
delFiles = delFolder.getFiles();

while (delFiles.hasNext()) {
  var delFile = delFiles.next();
  Utilities.sleep(1500);
    delFile.setTrashed(true);