Как я могу использовать определенные ячейки в диапазоне листов Google?

Я создаю бота 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]
    });
  }
})()

Я должен извиниться за мое плохое знание английского языка. К сожалению, я не могу понять ваш ожидаемый результат 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?. Могу ли я спросить вас о деталях ожидаемого результата? Во-первых, мне хотелось бы правильно понять Ваш вопрос.

Tanaike 26.07.2024 01:04

@Tanaike У меня есть электронная таблица Google, связанная с моим ботом, ячейки находятся в диапазоне B5-H60, я просто хочу использовать E20, F30, G50 и C10, как мне получить информацию об этих ячейках?

famq 26.07.2024 09:36

Спасибо за ответ. Из вашего ответа я предложил ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш ожидаемый результат, прошу прощения.

Tanaike 27.07.2024 03:26

@Tanaike Если бы я хотел получить ответ каждого отдельно, как бы это сделать? Вместо ответа всем вместе.

famq 28.07.2024 00:33

Например, я пытаюсь использовать их здесь, когда создаю вставку в Discord { name: Total DAs: , value: ${E20}, inline: false, }, { name: Total Selections Hosted: , value: ${F30}, inline: false, }, { name: New Recruits: , значение: ${G50}, встроенное: ложь, }, { имя: S2 Mini Events: , значение: ${C10}, встроенное: ложь, },

famq 28.07.2024 00:52

Спасибо за ответ. Что касается @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"]. Если это не ваш ожидаемый результат, прошу прощения.

Tanaike 28.07.2024 01:55

Или, в качестве другого подхода, из вашего сценария показа, если вы используете const pcc = await readCerts();, как насчет изменения его на const {E20, F30, G50, C10} = await readCerts();. Благодаря этому вы можете напрямую использовать значения в качестве переменных E20, F30, G50, C10.

Tanaike 28.07.2024 02:12

@Tanaike Оу, чувак, спасибо тебе огромное! Вы мне очень помогли!

famq 28.07.2024 03:12

Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 28.07.2024 06:38

@Tanaike, на самом деле я столкнулся еще с одной проблемой. Когда ячейка пуста, выдает ошибку, можно ли как-нибудь это исправить? error TypeError: Cannot read properties of undefined (reading '0')

famq 28.07.2024 08:34

Что касается вашего нового вопроса 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 28.07.2024 08:54

@Tanaike Это работает! Еще раз спасибо!

famq 28.07.2024 09:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
12
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по вашему следующему ответу,

У меня есть электронная таблица 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]);
    

Примечание:

  • В этой модификации предполагается, что ваш клиент может получить доступ к электронной таблице. Пожалуйста, будьте осторожны с этим.

Ссылка:

  • Метод: Spreadsheets.values.batchGet

Добавлен:

По поводу вашего следующего нового вопроса,

На самом деле я столкнулся еще с одной проблемой. Когда ячейка пуста, выдает ошибку, можно ли как-нибудь это исправить? ошибка 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), {});

Другие вопросы по теме