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

Я создаю бота Discord и хочу написать в определенную ячейку в таблицах Google. С помощью этого кода я могу опубликовать пользовательский ввод во встраивании, когда команда выполняется в Discord.

Однако код возвращает ошибку: «Отсутствует диапазон» и не пишется в таблицах Google.

По сути, я хочу, чтобы пользователь использовал команду «/checkbl steamidhere». «steamidhere» будет любым пользовательским вводом. Запишите этот пользовательский ввод в ячейку H1 листов Google.

Это мой код, который я сейчас использую:

async sample() {
    const sheets = google.sheets({ version: "v4", auth });
    const spreadsheetId = "1lEB9fEqZUNtR0Tq-gzHVVaQ2eQvxsuiwXSTW3VGC2xw";
  
    const sheetName = "BOTDATA";
    const cells = ["H1"];
    const valueInputOption = "USER_ENTERED";
    const userInput = "sample value";
  
    const result = await sheets.spreadsheets.values.update({
      spreadsheetId,
      range: `'${sheetName}'!${cells[0]}`,
      resource: { values: [[userInput]] },
      valueInputOption,
    });
    console.info(result.data);
  }
  
  sample();
Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я считаю, что ваша цель состоит в следующем.

  • Вы хотите поместить значение userInput из const userInput = interaction.options.get('steamid').value; в ячейку «H1» листа «BOTDATA».

В этом случае как насчет следующей модификации? В этой модификации функция readBlacklist() не используется. В ячейку «H1» листа «BOTDATA» помещается только значение userInput.

Модифицированный скрипт:

От:

const userInput = interaction.options.get('steamid').value;
const bl = new EmbedBuilder()

К:

const userInput = interaction.options.get('steamid').value;

// --- I added the below script.
const spreadsheetId = "myspreadsheetID";
const sheetName = "BOTDATA";
const cells = ["H1"];
const valueInputOption = "USER_ENTERED";
// const userInput = "sample value"; // This is a sample value. In your situation, "const userInput = interaction.options.get('steamid').value;" is used.
const result = await sheets.spreadsheets.values.update({
  spreadsheetId,
  range: `'${sheetName}'!${cells[0]}`,
  resource: { values: [[userInput]] },
  valueInputOption,
});
// console.info(result.data); // If you want to confirn the returned value, please use this.
// ---

const bl = new EmbedBuilder()
  • Когда этот скрипт запускается и другие части работают нормально, значение userInput помещается в ячейку «H1» листа «BOTDATA».

Примечание:

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

Ссылка:

Добавлен:

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

Я обновил свой первоначальный вопрос, указав модификацию и ошибку, которую я получаю.

и, после вашей новой ошибки,

К сожалению, я получаю TypeError: (промежуточное значение)(...) не является функцией

К сожалению, я не могу повторить вашу новую ошибку. Меня беспокоит, связана ли ваша новая ошибка с моим сценарием. Итак, чтобы проверить это, протестируйте следующий скрипт. В дополнительном скрипте используется только мой скрипт. Если возникнет такая же ошибка, пожалуйста, сообщите мне.

async function sample() { // <--- Modified
  const sheets =   // Please use your client
  const spreadsheetId = "###"; // Please set your spreadsheet ID.

  const sheetName = "BOTDATA";
  const cells = ["H1"];
  const valueInputOption = "USER_ENTERED";
  const userInput = "sample value";

  // const sheets = google.sheets({ version: "v4", auth }); // Please remove this line.
  const result = await sheets.spreadsheets.values.update({
    spreadsheetId,
    range: `'${sheetName}'!${cells[0]}`,
    resource: { values: [[userInput]] },
    valueInputOption,
  });
  console.info(result.data);
}

sample();

Я обновил свой первоначальный вопрос, указав модификацию и ошибку, которую я получаю.

famq 29.07.2024 04:38

@famq Спасибо за ответ. Что касается вашей новой ошибки TypeError: (intermediate value)(...) is not a function, к сожалению, мой модифицированный скрипт не использует intermediate value. Меня беспокоит, связана ли ваша новая ошибка с моим сценарием. Поэтому, чтобы это проверить, протестируйте дополнительный скрипт. В дополнительном скрипте используется только мой скрипт. Если возникнет такая же ошибка, пожалуйста, сообщите мне.

Tanaike 29.07.2024 08:05

@famq Кстати, в обновленном скрипте удалите const write = await readBlacklist(['test']); и console.info(write);. В моей модификации readBlacklist не используется, как указано в моем ответе. Потому что ваш readBlacklist неправильный. Пожалуйста, будьте осторожны с этим.

Tanaike 29.07.2024 08:15

Хорошо, извините, я удалил const write = await readBlacklist(['test']) и console.info(write);, но ошибка все равно выдавалась. Я удалил весь свой код и заменил его вашим «Добавленным» кодом, и получаю эту ошибку cannot redeclare blocked-scoped variable 'sheets'

famq 29.07.2024 08:39

@famq Я должен извиниться за свои очень-очень плохие навыки. Я заметил, что в добавленном скрипте я забыл удалить использованный клиент const sheets = google.sheets({ version: "v4", auth });. Ваша новая ошибка cannot redeclare blocked-scoped variable 'sheets' связана с этим. Поэтому, пожалуйста, удалите его. Причина, по которой я забыл его удалить, связана с моими очень-очень плохими навыками. Я еще раз глубоко извиняюсь за свои очень-очень плохие навыки.

Tanaike 29.07.2024 08:40

с этим новым скриптом у меня здесь есть только ваш скрипт, и я вижу 2 ошибки: Unexpected keyword or identifier. и ';' expected. одна для асинхронности, а другая для "{" в конце.

famq 29.07.2024 08:48

@famq Спасибо за ответ. Во-первых, когда я протестировал добавленный скрипт, ошибок не произошло. Что касается with this new script i have only your script here and am seeing 2 errors: Unexpected keyword or identifier. and ';' expected. One is for async and the other for the "{" at the end of it, в данном случае я думаю, что это связано с вашим реальным сценарием. Я беспокоюсь, что вы можете неправильно скопировать и вставить мой сценарий. Итак, пожалуйста, подтвердите это еще раз. Если вы не можете его понять, предоставьте свой текущий сценарий, чтобы его можно было правильно воспроизвести.

Tanaike 29.07.2024 08:51

Я пошел дальше и заменил весь файл index.js исходным сообщением с вопросом. Мой вопрос связан со строкой 244 — КОМАНДА CHECKBL.

famq 29.07.2024 09:13

@famq Спасибо за ответ. Что касается Ive gone ahead and replaced my entire index.js file into my original question post. My question is related to line 244 - CHECKBL COMMAND, когда я увидел ваш сценарий показа, я забеспокоился, что ваш добавленный сценарий слишком большой. Мой добавленный сценарий очень прост. Чтобы просто протестировать, я бы рекомендовал тестировать только добавленный мною скрипт, включая ваш клиент, без других частей. Кстати, когда я тестировал только ваш показ sample() с действительным клиентом, ошибок не возникало. Итак, я беспокоюсь, что причиной вашей нынешней проблемы могут быть другие части тела.

Tanaike 29.07.2024 09:19

Я создал новый js-файл. и я все еще получаю те же две ошибки.

famq 29.07.2024 09:35

@famq Я заметил, что вы обновили свой вопрос. А как насчет изменения async sample() { на async function sample() { в вашем сценарии?

Tanaike 29.07.2024 09:36

Хорошо, я сожалею об этом, в одной из ваших предыдущих модификаций это было написано так, но я это исправил, и это работает! Большое спасибо! Теперь это работает!

famq 29.07.2024 09:47

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

Tanaike 29.07.2024 09:48

Еще раз извините, я получаю ответ «выборочное значение» в ячейку H1 на листе Google. Как мне заменить это тем, что набрал пользователь? Обновлено: Я заменил переменную userInput на то, что хочу использовать, и это работает! Извините, еще раз спасибо за помощь!

famq 29.07.2024 09:57

Итак, если бы я хотел прочитать «H2» и записать «H1», нужно ли мне было бы создать для этого две разные асинхронные функции? Извините, что задаю так много вопросов, я просто хочу убедиться, что правильно понимаю.

famq 29.07.2024 10:09

Я действительно столкнулся с проблемой: когда я меняю userInput на interaction.options.get('steamid').value;, это работает, но все остальные мои команды не работают, я предполагаю, что ввод поступает от асинхронной команды, и я не могу редактировать функцию? Можете ли вы помочь мне с этим, если это возможно?

famq 29.07.2024 11:33

@famq По поводу твоего нового вопроса Ive actually come across an issue, When i change userInput to interaction.options.get('steamid').value; it works, but all my other commands do not work, im assuming because the input is coming from the async command, and i cannot edit a function? Can you please help me with this if possible., я бы хотел тебя поддержать. Итак, можете ли вы опубликовать это как новый вопрос, включив дополнительную информацию? Если вы можете помочь в решении вашего нового вопроса, я буду рад. Можете ли вы сотрудничать, чтобы сделать это?

Tanaike 29.07.2024 14:26

Только что опубликовал, еще раз спасибо.

famq 29.07.2024 15:51

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