Как принять переменное количество параметров в Google Sheets

Я создаю решение, в котором количество параметров, добавляемых к HTTP-запросу на получение, является переменным. Это означает, что URL-адрес может содержать от 1 до n параметров. Параметры в URL обозначаются стандартным именем и прикрепленным индексом. Вот пример URL:

https://script.google.com/macros/s/xxxxxxx/exec?fileName=2020-12-15&fridgeItems=2&fridgeItem0=ValueOfFridgeItem0&fridgeItem1=ValueOfFridgeItem1

Как мне интерпретировать переменное количество параметров в моей функции doGet() в .gs?

Обновлено: Я хочу создать с помощью этого запроса заголовок нового листа Google. Переменное количество параметров должно быть заголовками столбцов. Например. если запрос содержит 5 параметров, я хочу добавить в первую строку листа Google в столбцы с 1 по 5 соответствующие значения параметров.

Я попробовал следующий код, но он не работает:

function doGet(request) {
var FileNameString = request.parameter.fileName; //name of the new .gs file
var FridgeItems = request.parameter.fridgeItems; //amount of parameters/column headers passed to .gs

var sheet = SpreadsheetApp.create(FileNameString);

   for(var i=0; i<FridgeItems ; i++){
   sheet.getRange(1,i+2)
   .setValues(
     sheet.appendRow([request.parameter.fridgeItem&i]);
     );
   }
 }
}

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

Iamblichus 15.12.2020 13:20

@Iamblichus спасибо за быстрый ответ. я обновил вопрос, чтобы он был более точным, а также изменил исходный код на основе текущего состояния исследований. я хочу добиться того, чтобы значение каждого ключа представляло заголовок. заголовки еще не настроены, но их необходимо настроить динамически. Функция appendRow использовалась только из-за отсутствия функции appendColumn. Поскольку лист пуст, appendRow добавит строку 1.

Andreas Kurz 15.12.2020 14:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Цель:

Когда сделан запрос GET, вы хотите создать новую электронную таблицу, имя которой будет значением ключа параметра запроса fileName, а все остальные значения из всех других параметров запроса будут добавлены к единственному листу созданной электронной таблицы.

Проблемы:

Решение:

  • Получите значение из fileName и удалите это свойство из объекта request.parameter, используя оператор удаления .
  • Поскольку вам нужны значения остальных параметров, вы можете использовать Object.values() для получения массива с этими значениями.
  • Используйте Spreadsheet.appendRow(), чтобы добавить эти значения в созданную электронную таблицу.

Фрагмент кода:

function doGet(request) {
  const parameters = request.parameter;
  const fileName = parameters.fileName;
  delete parameters.fileName;
  const headers = Object.values(parameters);
  const spreadsheet = SpreadsheetApp.create(fileName);
  spreadsheet.appendRow(headers);
  return ContentService.createTextOutput("Headers appended!");
}

Редактировать:

Если вы хотите убедиться, что заголовки установлены в том же порядке, что и в запросе, вы можете вместо этого использовать request.queryString, который возвращает часть строки запроса URL-адреса, поэтому в этом случае это будет выглядеть так:

fileName=2020-12-15&fridgeItems=2&fridgeItem0=ValueOfFridgeItem0&fridgeItem1=ValueOfFridgeItem1

Затем вы можете использовать комбинацию map и filter, чтобы получить значения (за исключением того, что соответствует fileName):

function doGet(request) {
  const headers = request.queryString.split("&")
                                        .map(param => param.split(" = "))
                                        .filter(param => param[0] !== "fileName")
                                        .map(param => param[1]);
  const fileName = request.parameter.fileName;
  const sheet = SpreadsheetApp.create(fileName)
  sheet.appendRow(headers);
  return ContentService.createTextOutput("Headers appended!");
}

Большое спасибо. Это вообще работает! Однако кажется, что порядок параметров запроса изменчив? «Заголовок» создается, но не в том порядке, в котором были предоставлены параметры. Несколько запусков дают разные результаты по порядку. Есть ли шанс повлиять на порядок? Спасибо за поддержку!

Andreas Kurz 15.12.2020 18:24

@AndreasKurz Я добавил в свой ответ альтернативный код, чтобы сохранить порядок.

Iamblichus 16.12.2020 12:19

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