gpt4 book ai didi

google-apps-script - 如何从应用程序脚本使用 Google 表格查询或 Google 可视化 API?

转载 作者:行者123 更新时间:2023-12-05 08:23:05 24 4
gpt4 key购买 nike

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

=query('16 Jul - 20 Jul Responses'!A1:I31, "SELECT C WHERE D = 'Available'", 0)

Google Scripts 中是否有任何方法可以解析该查询结果的对象表示形式?我希望能够编写如下代码:

var queryString = '=query('16 Jul - 20 Jul Responses'!A1:I31, "SELECT C WHERE D = 'Available'", 0)';
var results = new Query(queryString);
for(var i = 0; i < results.length; i++) {
var result = results[i];
// do something
}

据我所知,除非您使用 Google Web App,否则 Query 对象不存在。这是真的?或者有没有办法实现这个想法?

最佳答案

=QUERY 是一个电子表格函数。如果你想在 Apps 脚本中使用该功能,你可以利用 Google's Visualization API and Query Language .我在 GAS 中为它写了一个自定义模块。这是一个摘录:

(function(context) {

const Utils = (context.Utils || (context.Utils = {}));


/**
* Queries a spreadsheet using Google Visualization API's Datasoure Url.
*
* @param {String} ssId Spreadsheet ID.
* @param {String} query Query string.
* @param {String|Number} sheetId Sheet Id (gid if number, name if string). [OPTIONAL]
* @param {String} range Range [OPTIONAL]
* @param {Number} headers Header rows. [OPTIONAL]
*/
Utils.gvizQuery = function(ssId, query, sheetId, range, headers) {
var response = JSON.parse( UrlFetchApp
.fetch(
Utilities.formatString(
"https://docs.google.com/spreadsheets/d/%s/gviz/tq?tq=%s%s%s%s",
ssId,
encodeURIComponent(query),
(typeof sheetId === "number") ? "&gid=" + sheetId :
(typeof sheetId === "string") ? "&sheet=" + sheetId :
"",
(typeof range === "string") ? "&range=" + range :
"",
"&headers=" + ((typeof headers === "number" && headers > 0) ? headers : "0")
),
{
"headers":{
"Authorization":"Bearer " + ScriptApp.getOAuthToken()
}
}
)
.getContentText()
.replace("/*O_o*/\n", "") // remove JSONP wrapper
.replace(/(google\.visualization\.Query\.setResponse\()|(\);)/gm, "") // remove JSONP wrapper
),
table = response.table,
rows;

if (typeof headers === "number") {

rows = table.rows.map(function(row) {
return table.cols.reduce(
function(acc, col, colIndex) {
acc[col.label] = row.c[colIndex] && row.c[colIndex].v;
return acc;
},
{}
);
});

} else {

rows = table.rows.map(function(row) {
return row.c.reduce(
function(acc, col) {
acc.push(col && col.v);
return acc;
},
[]
);
});
}

return rows;

};

Object.freeze(Utils);

})(this);

只需将该模块放入 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
);

关于google-apps-script - 如何从应用程序脚本使用 Google 表格查询或 Google 可视化 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com