Я создаю бота 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]
});
}
})()
@Tanaike У меня есть электронная таблица Google, связанная с моим ботом, ячейки находятся в диапазоне B5-H60, я просто хочу использовать E20, F30, G50 и C10, как мне получить информацию об этих ячейках?
Спасибо за ответ. Из вашего ответа я предложил ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш ожидаемый результат, прошу прощения.
@Tanaike Если бы я хотел получить ответ каждого отдельно, как бы это сделать? Вместо ответа всем вместе.
Например, я пытаюсь использовать их здесь, когда создаю вставку в Discord { name: Total DAs:
, value: ${E20}
, inline: false, }, { name: Total Selections Hosted:
, value: ${F30}
, inline: false, }, { name: New Recruits:
, значение: ${G50}
, встроенное: ложь, }, { имя: S2 Mini Events:
, значение: ${C10}
, встроенное: ложь, },
Спасибо за ответ. Что касается @Tanaike If i wanted to get the response of each one separately how would that be done? Instead of the response being all together.
, в моем ответе rows
— это объект. Таким образом, вы можете получить каждое значение, используя ключ. Например, если вам нужно значение «E20», вы можете получить его как rows["E20"]
. Если вы извлекаете значение из rows
как pcc
, значение «E20» можно получить как pcc["E20"]
. Если это не ваш ожидаемый результат, прошу прощения.
Или, в качестве другого подхода, из вашего сценария показа, если вы используете const pcc = await readCerts();
, как насчет изменения его на const {E20, F30, G50, C10} = await readCerts();
. Благодаря этому вы можете напрямую использовать значения в качестве переменных E20, F30, G50, C10
.
@Tanaike Оу, чувак, спасибо тебе огромное! Вы мне очень помогли!
Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.
@Tanaike, на самом деле я столкнулся еще с одной проблемой. Когда ячейка пуста, выдает ошибку, можно ли как-нибудь это исправить? error TypeError: Cannot read properties of undefined (reading '0')
Что касается вашего нового вопроса Ive actually ran into one more issue. When the cell is empty it gives me an error, is there any way to fix this? error TypeError: Cannot read properties of undefined (reading '0')
, я добавил еще одну модификацию. Пожалуйста, подтвердите это.
@Tanaike Это работает! Еще раз спасибо!
Судя по вашему следующему ответу,
У меня есть электронная таблица Google, связанная с моим ботом, ячейки находятся в диапазоне B5-H60, я просто хочу использовать E20, F30, G50 и C10, как мне получить информацию об этих ячейках?
Я понял ваш фактический ожидаемый результат следующим образом.
E20, F30, G50, and C10
с помощью Sheets API.В этом случае как насчет использования «Метода: 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]);
По поводу вашего следующего нового вопроса,
На самом деле я столкнулся еще с одной проблемой. Когда ячейка пуста, выдает ошибку, можно ли как-нибудь это исправить? ошибка TypeError: невозможно прочитать свойства неопределенного значения (чтение «0»)
В этом случае измените приведенный выше сценарий следующим образом.
const rows = response.data.valueRanges.reduce((o, { values }, i) => ((o[cells[i]] = values[0][0]), o), {});
const rows = response.data.valueRanges.reduce((o, { values = [[""]] }, i) => ((o[cells[i]] = values[0][0]), o), {});
или
const rows = response.data.valueRanges.reduce((o, { values }, i) => ((o[cells[i]] = values ? values[0][0] : ""), o), {});
Я должен извиниться за мое плохое знание английского языка. К сожалению, я не могу понять ваш ожидаемый результат
How can I use specific cells in a Google sheets range?
иHow do I get a specific cell out of the range and use it?
. Могу ли я спросить вас о деталях ожидаемого результата? Во-первых, мне хотелось бы правильно понять Ваш вопрос.