我有一张包含数千行的工作表,我试图查询它而不是每次都获取所有内容。 我看了一下查询语言,但它似乎不适合我的情况。
我正在使用服务帐户进行身份验证:
const auth = new google.auth.GoogleAuth({
credentials: googleCredentials,
scopes: "https://www.googleapis.com/auth/spreadsheets",
});
并使用batchGet一次获取多个选项卡。
const standardSpreadsheetData = await sheets.spreadsheets.values.batchGet({
auth,
spreadsheetId: regularSpreadsheetId,
ranges: regularRanges,
});
但我似乎无法弄清楚在哪里可以添加查询。
我想查询的是这样的:
select * where B = ''9831"
有什么想法可以去哪里看吗?
我相信您的目标如下。
select * where B = ''9831"
这样的查询检索行值。我猜你对
select * where B = ''9831"
的查询可能是select * where B = '9831'
。
不幸的是,在现阶段,像
select * where B = '9831'
这样的查询无法与Sheets API一起使用。在这种情况下,需要使用访问令牌来使用查询语言的端点。 参考
当这些要点反映在示例脚本中时,下面的示例脚本怎么样?
const { google } = require("googleapis");
const request = require("request");
// Please use your script here.
const auth = new google.auth.GoogleAuth({
credentials: googleCredentials,
scopes: "https://www.googleapis.com/auth/spreadsheets",
});
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetId = "###"; // Please set the search text. In your case, it's ID.
const query = "select * where B='9831'"; // This is the query for searching.
auth
.getAccessToken()
.then((accessToken) => {
const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/gviz/tq?tqx=out:csv&gid=${sheetId}&tq=${encodeURIComponent(query)}`;
request(
{
url,
method: "GET",
headers: { authorization: `Bearer ${accessToken}` },
},
(err, res, result) => {
if (err) {
console.log(err);
return;
}
if (result != "") {
const [, ...res] = result.split("\n").map((e) =>
e.split(",").map((f) => {
const t = f.replace(/"/g, "");
return isNaN(t) ? t : Number(t);
})
);
console.log(res);
}
}
);
})
.catch((err) => console.log(err));