【问题标题】:How to debug DriveApp.getFileById with Google App script如何使用 Google App 脚本调试 DriveApp.getFileById
【发布时间】:2020-02-20 16:29:45
【问题描述】:

我无法返回我知道在我的 Google 云端硬盘中的文件,并且我不确定如何调试问题所在。

这是我正在运行的代码:

function get_file_contents() {
  try {
    var fileName = "rainbows.json";
    var files = DriveApp.getFilesByName(fileName)

     if (files.hasNext()) {
       var file = files.next();
       var content = file.getBlob().getDataAsString();
       var json = JSON.parse(content);
     }
  }catch(e){log(e)}
  return json;
}

当我在 google app 脚本中使用调试器时,它会在 var file = DriveApp.getFilesByName(fileName) 行上挂起一段时间,然后停止。我得到的只是{}

除此之外,我尝试使用DriveApp.getFileById() 并得到相同的结果。

如果您能指出我的任何资源,我将不胜感激。我已经尝试过查看docs,但我要么遗漏了一些东西,要么没有答案。

【问题讨论】:

  • 你应该登录 e.message 而不是 e
  • 该文件是在Bin 中还是在共享驱动器中?

标签: google-apps-script


【解决方案1】:

您无法调试对 DriveApp 等服务的调用的内部行为,您只能查看传递给它的内容以及它返回的内容。

如果您无法按名称找到给定文件,则可能是更高级别的问题,例如权限或文件位置。

DriveApp.getFilesByName() "获取用户的云端硬盘中具有给定名称的所有文件的集合。"我加粗的部分是关键,它不会拾取您也有权访问但不在您的云端硬盘中的文件。例如,与您共享的文件或共享驱动器上的文件。

但是 DriveApp.getFileById() 应该在这两种情况下都可以工作,也可以获取您有权访问的任何文件。

我会在使用 DriveApp.getFileById() 进行测试时归零,请注意 getFileById 返回一个 File 对象,而不是 File Iterator,因此您不能直接将它放在 getFilesByName() 的位置。它需要进行不同的测试。 getFileById() 应该在失败时引发异常,而 getFilesByName() 只返回一个空迭代器。

如果您无法通过 ID 打开文件,您可能是在查看权限问题,可能是脚本在错误的帐户下运行,或者没有被授予对云端硬盘的访问权限(尽管应该提示您授予权限此范围自动),或者从不允许 DriveApp 访问的触发器运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多