google-apps-script - 错误“无效参数:”使用 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);
}
解决方案
在您的情况下,有以下修改点。
修改点:
- 请为
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()
. - 如果要使用范围 of
https://www.googleapis.com/auth/drive
代替https://www.googleapis.com/auth/drive.readonly
,请使用// DriveApp.createFile()
代替// DriveApp.getFiles()
参考:
推荐阅读
- javascript - Angular 版本更新:重载签名必须都是环境或非环境的
- java - java冒泡排序if语句越界
- html - 边框宽度值不会改变
- r - 获取节点值以及父属性
- angular - 如何从 HttpClientInMemoryWebApiModule 角度排除服务?
- ios - 我在属于 uitableviewcell 的自定义视图上有动画,只有第一个在工作
- docker - 为什么此 ASP.NET Core Docker 构建在 Azure Pipelines 中失败?
- javascript - 获取一个对象数组的两个值,在 vue js 上显示一个与另一个
- asynchronous - 关于 Dart async/await。我用一段代码测试了一下,但是打印的结果并不如预期
- linux - 在 linux shell 脚本中对十六进制数进行按位与运算以输出十六进制数