【问题标题】:Drive.Files.remove(fileId) remove the item but return an error messageDrive.Files.remove(fileId) 删除项目但返回错误消息
【发布时间】:2019-11-18 20:21:41
【问题描述】:

我正在努力编写可以满足我所有需求的代码,但在函数末尾返回一条错误消息,这会阻止脚本的其余部分运行。

我正在使用这个脚本:

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 Imported”是函数的最后一行,所以看起来它正在完成函数但最后消息来了。我可能不得不尝试其他选项而不是 Drive API。谢谢你们的帮助,如果我成功了,我会告诉你们的。

【问题讨论】:

  • 您在代码中的什么位置定义了 Drive 是什么?这看起来完全一团糟。请做一个最简单的例子,说明你正在尝试做的事情,而不需要所有额外的东西。
  • 我启用了 Drive API。我想将一个 excel 文件导入到我已经拥有的工作表中,我发现最简单的方法是从 excel 文件创建一个 GSheets 文件,然后将该文件的值导入到我拥有的工作表中。所以我从 excel 文件创建了一个 GSheet,将数据复制到我的工作表,然后删除创建的文件。一切正常,但吃完它会产生该错误,我将该函数移至顺序的最后一个,因此它完全可以正常运行脚本,但最后仍会产生错误。
  • 尝试在删除前暂停代码:Utilities.sleep(5000);Drive.Files.remove(id);
  • @Alexandre 你为什么不直接用 DriveApp 删除文件我不明白你为什么需要使用 Drive API?
  • 我正在使用 Drive API 创建文件,当我使用 DriveApp 删除文件时,脚本完成但不会从文件夹中删除文件。

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


【解决方案1】:

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

【讨论】:

  • 你好,杰克,正如我所提到的,我没有再遇到这个错误,我只是创建了一个新文件夹,我将所有创建的工作表都放在那里。在我的情况下,我真的不需要删除它们,但也许您可以创建一个脚本,每天删除该文件夹中的所有文件或任何适合您需要的文件。我也没有通过此选项,但它可能会起作用。
【解决方案2】:

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

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

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

手动启动时也可以正常运行...

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

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

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

【讨论】:

    【解决方案3】:

    正如 cmets 中提到的@Alan Wells,您没有给 Drive 足够的时间来生成文件、复制值并删除它。

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

    更多信息here

    【讨论】:

    • 脚本实际上正在按照它应该做的那样删除文件,但仍然返回错误消息。
    • @Alexandre 也许你正在运行这个函数两次,你能创建一个计数器来检查你的代码执行了多少次吗?
    • 我把日志贴在主帖里了,不知道还能做什么,我想我会尝试其他选项,看看效果如何。谢谢你们的帮助。
    【解决方案4】:

    好吧,伙计们,我最终为这些文件创建了一个存档,所以我不会删除它们,我只会将它们留在我作为存档创建的这个文件夹中。 谢谢你的帮助。

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2018-05-10
      • 2012-08-19
      • 2017-07-26
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多