从Google表格脚本中打开文件

时间:2014-11-10 23:14:10

标签: google-apps-script google-sheets

我已经运行了一段时间(一年)的Google表格脚本,需要从它的Google云端硬盘目录中读取HTML文件。打开文件的代码如下所示:

var myHtmlFile = UrlFetchApp.fetch("https://googledrive.com/host/0B1m........JtZzQ/myfile.htm");

...我可以使用HTM文件进一步解析。

突然,上面的代码抛出错误404.

最近有什么变化,阻止我打开文件吗?

2 个答案:

答案 0 :(得分:0)

我发现之前曾经有过这么奇怪!如果它确实存在,那可能就是一个错误 - 非常确定它从来没有打算像#34;本地"文件...我从未见过它提到UrlFetchApp.fetch()可以获取的任何地方#34;本地"这样的文件。

一个简单的解决方法就是使用文件的正确完整URL:

var myHtmlFile = UrlFetchApp.fetch("https://googledrive.com/host/{public_folder_id}/myfile.htm");

这将确保您的代码符合API,并且在下次Google更改内容时不会中断。

答案 1 :(得分:0)

在与'azawaza'讨论之后(感谢所有提示),我终于解决了这个问题,所以我发布了解决方案以防其他人陷入其中。

看起来像构造

https://googledrive.com/host/{public_folder_id}/myfile.htm
UrlFetchApp.fetch(url,true)中的

无法再使用。它给出了错误404.

我从以下构造中获取它(为简单起见,假设我的电子表格只有一个父文件夹):

  ...
  var myId = DocsList.getFileById(SpreadsheetApp.getActive().getId());
  var folderId = myId.getParents()[0].getId();
  var url = "https://googledrive.com/host/" + folderId + "/myfile.htm";

  // url looks like: https://googledrive.com/host/0B1m....JtZzQ/myfile.htm"
  var httpResp = UrlFetchApp.fetch(url,true);   //throws 404 !!!
  // now, parse 'httpResp'

对我有用的解决方案是直接使用这个构造找到文件(同样,假设只有一个给定名称的文件):

   var htmlCont = DocsList.find("myfile.htm")[0].getContentAsString(); 
   // now, parse htmlCont

我不知道为什么'旧'解决方案不再适用。正如我提到的,它工作了一年。

更新(2015年5月)
'DocsList'已被弃用,这是一个新的构造:

  var files = DriveApp.getFilesByName(myURL);
  if (files.hasNext()) {
    var htmlCont = files.next().getBlob().getDataAsString()
  }
必须使用