将 UrlFetchApp.fetch(url) 与日期 'yyy-MM-dd' 一起使用时出现错误 "Invalid argument:"

error "Invalid argument:" when using UrlFetchApp.fetch(url) with where date 'yyy-MM-dd'

我使用 this sheet,我想获取日期 > 到“2020-07-21”的值, 我使用 html 输出的数据源 URL 是:https://docs.google.com/spreadsheets/d/1u78Qx5YIB2mektPyErz6xYtTXMLLtCapXlEpp63NTYI/gviz/tq?tqx=out:html&tq=select B where date '2020-07-21' > A &gid=0

问题是当我在 chrome 浏览器中选择数据源 URL 时,我可以看到响应数据,但是当 运行 使用函数 UrlFetchApp.fetch( url) 我收到一个错误。 脚本编辑器中的代码:

function myFunction() {
  var url ="https://docs.google.com/spreadsheets/d/1u78Qx5YIB2mektPyErz6xYtTXMLLtCapXlEpp63NTYI/gviz/tq?tqx=out:csv&tq=select B where date '2020-07-21' > A &gid=0"
  var response = UrlFetchApp.fetch(url).getContentText(); 
    Logger.log(response);
}

你的情况有以下修改点。

修改点:

  • 请对 select B where date '2020-07-21' > A 进行 URL 编码。
  • 请使用访问令牌向端点请求。
    • 这种情况下,因为是检索数据,所以我觉得https://www.googleapis.com/auth/drive.readonly的scope是可以用的

当这些点反映到你的脚本中,就变成了下面这样。

修改后的脚本:

function myFunction() {
  var query = "select B where date '2020-07-21' > A";
  var url ="https://docs.google.com/spreadsheets/d/1u78Qx5YIB2mektPyErz6xYtTXMLLtCapXlEpp63NTYI/gviz/tq?tqx=out:html&tq=" + encodeURIComponent(query) + "&gid=0";
  var params = {headers: {authorization: "Bearer " + ScriptApp.getOAuthToken()}};
  var response = UrlFetchApp.fetch(url, params).getContentText(); 
  Logger.log(response);
  
  // DriveApp.getFiles()  // This line is used for automatically detecting the scope of "https://www.googleapis.com/auth/drive.readonly". So please don't remove this line.
}
  • 当您 运行 脚本时,授权对话框打开。所以请授权范围。这样,脚本就是运行.

注:

  • 如果您的电子表格是公开共享的,我认为 params 不是必需的。届时,您可以删除 // DriveApp.getFiles().
  • 如果您想使用https://www.googleapis.com/auth/drive的范围而不是https://www.googleapis.com/auth/drive.readonly,请使用// DriveApp.createFile()而不是// DriveApp.getFiles()

参考文献: