将 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()
参考文献:
我使用 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()