首页 > 解决方案 > 错误“无效参数:”使用 UrlFetchApp.fetch(url) 与 where date 'yyy-MM-dd'

问题描述

我使用 这张表,我想获取日期为 > 到 '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);
}

标签: google-apps-scriptgoogle-sheetsgoogle-visualizationurlfetchgoogle-query-language

解决方案


在您的情况下,有以下修改点。

修改点:

  • 请为select B where date '2020-07-21' > A.
  • 请使用访问令牌向端点请求。
    • 在这种情况下,因为检索到数据,我认为https://www.googleapis.com/auth/drive.readonly可以使用的范围。

当这些点反映到你的脚本中时,它变成如下。

修改后的脚本:

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().
  • 如果要使用范围 ofhttps://www.googleapis.com/auth/drive代替https://www.googleapis.com/auth/drive.readonly,请使用// DriveApp.createFile()代替// DriveApp.getFiles()

参考:


推荐阅读