我正在创建一个 Discord 机器人。每当我使用链接到它的命令时,它就会起作用。但是,它显示设置范围内所有单元格中的所有数据。如何将特定单元格移出范围并使用它?
我一直这样做的方法是将范围替换为特定单元格,但我觉得这不是最实用的方法。
有人可以帮忙吗?我对 JS 还很陌生,所以任何提示将不胜感激。
async function readCerts() {
const sheets = google.sheets({
version: 'v4',
auth
});
const spreadsheetId = 'myIdHere';
const range = 'Overview!B5:H60';
try {
const response = await sheets.spreadsheets.values.get({
spreadsheetId,
range
});
const rows = response.data.values;
return rows;
} catch (error) {
console.error('error', error);
}
}
(async() => {
const pcc = await readCerts();
if (interaction.commandName === 'stats') {
const maar = new EmbedBuilder()
.setTitle('Statistics for Current Month')
//.setDescription('cool description here')
.setColor('Red')
.setThumbnail('https://i.imgur.com/9GKhYQf.png')
.setFooter({
text: 'DroneOS',
iconURL: 'https://i.imgur.com/9GKhYQf.png'
})
.setTimestamp()
.addFields({
name: `Total AARs: `,
value: `${raar}`,
inline: false,
});
interaction.reply({
embeds: [maar]
});
}
})()
从您的以下回复来看,
我有一个链接到我的机器人的谷歌电子表格,范围内的单元格是 B5-H60,我只想使用 E20、F30、G50 和 C10 我如何获取该单元格信息?
我对你的实际预期结果的理解如下。
E20, F30, G50, and C10
检索单元格值。在这种情况下,使用“方法:spreadsheets.values.batchGet”怎么样?当这反映在您的脚本中时,它会变成如下所示。
在此修改中,您的功能
readCerts
被修改。在此修改中,为了从 E20、F30、G50 和 C10 检索单元格值,使用“方法:spreadsheets.values.batchGet”。
async function readCerts() {
const spreadsheetId = "myIdHere";
const sheetName = "Overview";
const cells = ["E20", "F30", "G50", "C10"];
const ranges = cells.map((c) => `'${sheetName}'!${c}`);
const sheets = google.sheets({ version: "v4", auth });
try {
const response = await sheets.spreadsheets.values.batchGet({ spreadsheetId, ranges });
const rows = response.data.valueRanges.reduce((o, { values }, i) => ((o[cells[i]] = values[0][0]), o), {});
return rows;
} catch (error) {
console.error("error", error);
}
}
运行此脚本时,
rows
的值如下。
{
"E20": "cell value of E20",
"F30": "cell value of F30",
"G50": "cell value of G50",
"C10": "cell value of C10"
}
当您只想以
["E20", "F30", "G50", "C10"]
的顺序检索值作为一维数组时,请按如下方式修改 const rows = response.data.valueRanges.reduce((o, { values }, i) => ((o[cells[i]] = values[0][0]), o), {});
。
const rows = response.data.valueRanges.map(({ values }) => values[0][0]);