Google 工作表 API - 按关键字搜索和 return 结果 [nodeJS]
Google Sheets API - search by keyword and return results [nodeJS]
我开发了一个使用 Google 表格作为数据库的简单应用程序。到目前为止,我只是用它来获取行,这对我来说已经足够了。但现在我想添加用户可以按工作表值搜索的功能。不幸的是,我无法在文档或互联网上找到任何使用 batchGet
方法的示例。它只允许指定范围并获取此类内容 - 而不是通过关键字。我发现 some examples 和 Query API
但我认为它与我在下面提供的方法不兼容。
所以,我的问题是:我可以使用 batchGet()
按关键字搜索并获取一些特定的行吗?或者至少尽可能地扩展提供的代码,而不重写所有内容?
const { google } = require('googleapis');
const client = new google.auth.JWT(
process.env.GS_CLIENT_EMAIL,
null,
process.env.GS_PRIVATE_KEY.replace(/\n/g, '\n'),
['https://www.googleapis.com/auth/spreadsheets.readonly']
);
client.authorize((err) => {
if(err) {
console.log(err);
return;
}
return client;
});
const gsrun = async (lang, page) => {
const gsapi = google.sheets({ version: 'v4', auth: client });
const sheetId = lang.toUpperCase();
const spreadsheetId = process.env[`SHEET_${sheetId}`];
const fileInfo = await gsapi.spreadsheets.get({
spreadsheetId
});
const sheetNames = (page === null) ? fileInfo.data.sheets.map((d) => d.properties.title) : [fileInfo.data.sheets[page].properties.title];
const data = await gsapi.spreadsheets.values.batchGet({
spreadsheetId,
ranges: sheetNames.map((name) => `${name}!A1:D200`)
});
const sheetValues = data.data.valueRanges.map(({ values }) => values);
return {
totalPages: fileInfo.data.sheets.length,
items: sheetValues
}; // [[[],[],...[]],[[],[],...[]],...[],[],...[]];
};
exports.gsrun = gsrun;
问题:
如果我没理解错的话,您想要检索特定单元格具有特定值的行。
遗憾的是,在工作表 API 请求.
期间,无法根据列值 过滤行
解决方法:
我只是过滤 API 收到的返回值。
例如,替换为:
const sheetValues = data.data.valueRanges.map(({ values }) => values);
有了这个:
const KEYWORD_COLUMN = 1; // Change according to your preferences
const KEYWORD = "My keyword"; // Change according to your preferences
const sheetValues = data.data.valueRanges.map(({ values }) => values.filter(row => row[KEYWORD_COLUMN - 1] === KEYWORD));
我开发了一个使用 Google 表格作为数据库的简单应用程序。到目前为止,我只是用它来获取行,这对我来说已经足够了。但现在我想添加用户可以按工作表值搜索的功能。不幸的是,我无法在文档或互联网上找到任何使用 batchGet
方法的示例。它只允许指定范围并获取此类内容 - 而不是通过关键字。我发现 some examples 和 Query API
但我认为它与我在下面提供的方法不兼容。
所以,我的问题是:我可以使用 batchGet()
按关键字搜索并获取一些特定的行吗?或者至少尽可能地扩展提供的代码,而不重写所有内容?
const { google } = require('googleapis');
const client = new google.auth.JWT(
process.env.GS_CLIENT_EMAIL,
null,
process.env.GS_PRIVATE_KEY.replace(/\n/g, '\n'),
['https://www.googleapis.com/auth/spreadsheets.readonly']
);
client.authorize((err) => {
if(err) {
console.log(err);
return;
}
return client;
});
const gsrun = async (lang, page) => {
const gsapi = google.sheets({ version: 'v4', auth: client });
const sheetId = lang.toUpperCase();
const spreadsheetId = process.env[`SHEET_${sheetId}`];
const fileInfo = await gsapi.spreadsheets.get({
spreadsheetId
});
const sheetNames = (page === null) ? fileInfo.data.sheets.map((d) => d.properties.title) : [fileInfo.data.sheets[page].properties.title];
const data = await gsapi.spreadsheets.values.batchGet({
spreadsheetId,
ranges: sheetNames.map((name) => `${name}!A1:D200`)
});
const sheetValues = data.data.valueRanges.map(({ values }) => values);
return {
totalPages: fileInfo.data.sheets.length,
items: sheetValues
}; // [[[],[],...[]],[[],[],...[]],...[],[],...[]];
};
exports.gsrun = gsrun;
问题:
如果我没理解错的话,您想要检索特定单元格具有特定值的行。
遗憾的是,在工作表 API 请求.
期间,无法根据列值 过滤行解决方法:
我只是过滤 API 收到的返回值。
例如,替换为:
const sheetValues = data.data.valueRanges.map(({ values }) => values);
有了这个:
const KEYWORD_COLUMN = 1; // Change according to your preferences
const KEYWORD = "My keyword"; // Change according to your preferences
const sheetValues = data.data.valueRanges.map(({ values }) => values.filter(row => row[KEYWORD_COLUMN - 1] === KEYWORD));