Google apps script 如何从应用程序脚本使用Google sheets查询或Google可视化api?

Google apps script 如何从应用程序脚本使用Google sheets查询或Google可视化api?,google-apps-script,google-sheets,google-visualization,google-sheets-query,google-query-language,Google Apps Script,Google Sheets,Google Visualization,Google Sheets Query,Google Query Language,我正在使用绑定到Google工作表的Google脚本以编程方式生成以下查询: =query('7月16日-7月20日响应'!A1:I31,“选择C,其中D='Available',0) 谷歌脚本中有没有办法解析该查询结果的对象表示?我希望能够编写如下代码: var queryString='=query('7月16日-7月20日响应'!A1:I31,“选择C,其中D='Available',0'); var结果=新查询(查询字符串); 对于(var i=0;i0)?标题:“0”) ), { “

我正在使用绑定到Google工作表的Google脚本以编程方式生成以下查询:

=query('7月16日-7月20日响应'!A1:I31,“选择C,其中D='Available',0)

谷歌脚本中有没有办法解析该查询结果的对象表示?我希望能够编写如下代码:

var queryString='=query('7月16日-7月20日响应'!A1:I31,“选择C,其中D='Available',0');
var结果=新查询(查询字符串);
对于(var i=0;i

据我所知,除非您使用的是Google Web应用程序,否则查询对象不存在。这是真的吗?还是有办法实现这个想法?

是一个电子表格功能。如果您想在应用程序脚本中使用该功能,您可以利用它。我用GAS编写了一个自定义模块。以下是摘录:

(函数(上下文){
const-Utils=(context.Utils | |(context.Utils={}));
/**
*使用Google Visualization API的数据源Url查询电子表格。
*
*@param{String}ssId电子表格ID。
*@param{String}查询字符串。
*@param{String | Number}sheetId Sheet Id(如果编号为gid,如果字符串为name)。[可选]
*@param{String}范围[可选]
*@param{Number}头行。[可选]
*/
Utils.gvizQuery=函数(ssId、查询、sheetId、范围、标题){
var response=JSON.parse(UrlFetchApp
.取回(
实用程序.formatString(
"https://docs.google.com/spreadsheets/d/%s/gviz/tq?tq=%s%s%s%s",
ssId,
编码组件(查询),
(图纸ID的类型==“编号”)?“&gid=“+图纸ID:
(图纸ID的类型==“字符串”)?“&sheet=“+sheetId:
"",
(typeof range==“string”)?“&range=“+range:
"",
“&headers=“+((标题类型==”数字“&headers>0)?标题:“0”)
), 
{
“标题”:{
“授权”:“承载者”+ScriptApp.getOAuthToken()
}
}
)
.getContentText()
.replace(“/*O\u O*/\n”和“”)//删除JSONP包装器
.replace(/(google\.visualization\.Query\.setResponse\())(\))/gm,“”//删除JSONP包装器
),
table=response.table,
排;
如果(标题类型==“编号”){
行=表.行.映射(函数(行){
返回表.cols.reduce(
功能(acc、col、colIndex){
acc[col.label]=row.c[colIndex]&row.c[colIndex].v;
返回acc;
}, 
{}
);
});
}否则{
行=表.行.映射(函数(行){
返回行c.reduce(
功能(acc、col){
acc.push(列和列v);
返回acc;
},
[]
);
});
}
返回行;
};
对象。冻结(Utils);
})(本条);
只需将该模块放入GAS编辑器中自己的文件中,即可按如下方式调用它:

// result is an array of objects if header row is specified, otherwise it is an array of arrays
var result = Utils.gvizQuery(
    "<YOUR_SPREADSHEET_ID>", 
    "<YOUR_QUERY_STRING>", 
    <SHEET_ID_IF_NEEDED>, // can be a number (the sheetId), or the name of the sheet; if not needed, but headers are, pass in undefined
    <RANGE>, // specify range, ex: `A2:O`
    <HEADER_ROW_INDEX_IF_NEEDED> // always a number
);
//如果指定了头行,则结果为对象数组,否则为数组数组
var result=Utils.gvizQuery(
"", 
"", 
,//可以是数字(sheetId)或工作表的名称;如果不需要,但标题是,则传入未定义
,//指定范围,例如:`A2:O`
//总是一个数字
);
是一个电子表格功能。如果您想在应用程序脚本中使用该功能,您可以利用它。我用GAS编写了一个自定义模块。以下是摘录:

(函数(上下文){
const-Utils=(context.Utils | |(context.Utils={}));
/**
*使用Google Visualization API的数据源Url查询电子表格。
*
*@param{String}ssId电子表格ID。
*@param{String}查询字符串。
*@param{String | Number}sheetId Sheet Id(如果编号为gid,如果字符串为name)。[可选]
*@param{String}范围[可选]
*@param{Number}头行。[可选]
*/
Utils.gvizQuery=函数(ssId、查询、sheetId、范围、标题){
var response=JSON.parse(UrlFetchApp
.取回(
实用程序.formatString(
"https://docs.google.com/spreadsheets/d/%s/gviz/tq?tq=%s%s%s%s",
ssId,
编码组件(查询),
(图纸ID的类型==“编号”)?“&gid=“+图纸ID:
(图纸ID的类型==“字符串”)?“&sheet=“+sheetId:
"",
(typeof range==“string”)?“&range=“+range:
"",
“&headers=“+((标题类型==”数字“&headers>0)?标题:“0”)
), 
{
“标题”:{
“授权”:“承载者”+ScriptApp.getOAuthToken()
}
}
)
.getContentText()
.replace(“/*O\u O*/\n”和“”)//删除JSONP包装器
.replace(/(google\.visualization\.Query\.setResponse\())(\))/gm,“”//删除JSONP包装器
),
表=响应