Drive.Files.remove(fileId)删除该项目,但返回错误消息

时间:2019-11-18 20:21:41

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

我正在竭尽所能地执行我想做的所有事情,但是在函数末尾返回一条错误消息,这阻止了脚本的其余部分运行。

我正在使用此脚本:

function abc(){

    var fileName = "file name";
    var tabName = "tab";
    clear(tabName,"A:AE");
    var excelFile = DriveApp.getFilesByName(fileName).next();
    var fileId = excelFile.getId();
    var folderId = "folder id";  
    var blob = excelFile.getBlob();

    var resource = {
        title: excelFile.getName(),
        mimeType: MimeType.GOOGLE_SHEETS,
        parents: [{id: folderId}],
    };

    var id = Drive.Files.insert(resource,blob).id;
    var newsheet = SpreadsheetApp.openById(id).getSheets()[0].getRange("A:AE").getValues();
    SpreadsheetApp.getActive().getSheetByName(tabName).getRange("A:AE").setValues(newsheet);
    Logger.log("ok so far");
    Drive.Files.remove(id);
}

我想删除刚刚创建的文件,它可以很好地完成工作,但是会生成如下错误消息:

  

缺少文档1b0pLioLpwZndFuW4kRQzxd5gkfZjWFIT5Qr8HV-LJvo(也许已将其删除,或者您没有读取权限?)

它会创建文件,将值复制到另一个电子表格,然后删除创建的文件,就像必须的那样。然后脚本结束,我还需要运行其他功能。

有什么想法要解决吗?

我也尝试了DriveApp.removeFile(file),,但是脚本完成了,并且没有从文件夹中删除文件。

这是错误消息:

  

“缺少文档1TVRiqJKN_bSXLW8B02XzUlTOUgT192prUYYwvBwu89w(也许已将其删除,或者您没有读取权限?)”

这是脚本生成的日志:

[19-11-19 08:58:22:466 PST] TSC cleaned
[19-11-19 08:58:22:466 PST] TSC has started
[19-11-19 08:58:26:737 PST] TSC file generated on ID = 1TVRiqJKN_bSXLW8B02XzUlTOUgT192prUYYwvBwu89w
[19-11-19 08:58:27:363 PST] 1TVRiqJKN_bSXLW8B02XzUlTOUgT192prUYYwvBwu89w
[19-11-19 08:58:27:497 PST] TSC copied to destination sheet and id = 1TVRiqJKN_bSXLW8B02XzUlTOUgT192prUYYwvBwu89w
[19-11-19 08:58:28:171 PST] TSC file deleted
[19-11-19 08:58:30:323 PST] TSC imported

最后一行“导入的TSC”是函数的最后一行,因此看起来它正在完成该函数,但最终出现了消息。我可能不得不尝试其他选项,而不是Drive API。谢谢您的帮助,如果我成功了,我会通知您。

4 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,无法确切查明是什么原因,但是发现如果将文件创建和删除拆分为单独的功能并分别运行它们,则不会出现此错误。但是,如果您从第三个函数中调用这两个函数,则会引发错误。

手动启动时运行良好...

createFile() {
  let fileId = Drive.Files.insert(fileId, blob);
}

手动启动时也运行无错误...

deleteFile() {
  Drive.Files.remove(fileId);
}

错误,提示找不到文件...

createAndDelete() {
  createFile();
  deleteFile();
}

答案 1 :(得分:0)

如评论中的@Alan Wells所示,您没有给云端硬盘足够的时间来生成文件,复制值并将其删除。

尝试在Utilities.sleep(15000);之后添加Drive.insert

更多信息here

答案 2 :(得分:0)

伙计们,我最终为文件创建了一个存档,因此我不会删除它们,我将它们保留在我作为存档创建的文件夹中。 谢谢您的帮助。

答案 3 :(得分:0)

我遇到了同样的问题。如果我只运行Drive.Files.insert并且下一个Drive.Files.remove文件被删除并且没有错误消息,但是如果我在SpreadsheetApp.openById之前使用Drive.Files.remove打开文件,则文件被删除并且脚本继续,但是我得到那个错误。我尝试Utilities.sleep最多(几乎是理智的)20秒钟,然后删除并运行脚本几次,但结果都是随机的(有时会出错,有时也不会出错)。 该如何解决?