Использование именованных диапазонов в качестве переменных в Google Sheets

1

Я собираю калькулятор цен для работы в Google Таблицах, я закодировал несколько функций в JS. Они отлично работают.

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

У меня была идея использовать Named Ranges со всеми настройками на отдельной Таблице. Получение этих ячеек и значений и преобразование их в переменные в JS с использованием функции.

Мне удалось получить именованные диапазоны, а также значения в JS. (getValues() и getNamedRanges()) Но у меня возникают проблемы с генерированием переменных из них. Я думаю, что это называется динамически сгенерированными переменными? Я пробовал использовать eval() (что, судя по всему, не очень хорошая идея, я прочитал) Но я тоже не могу работать.

Должен ли я определять все переменные, которые я использую, вместо того, чтобы генерировать их на основе значений именованных диапазонов и их значений?

Я относительно новичок в JS, поэтому я не уверен, что мне не хватает чего-то очевидного!

function convertNamedRangeToVariables() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = SpreadsheetApp.getActiveSheet();
  var sa = SpreadsheetApp.getActive();

  function getValuesOfNamedRange(x) {
  return ss.getRangeByName(x).getValues();
  }

  var namedRanges = sa.getNamedRanges();

  for (var i = 0; i < namedRanges.length; i++) {

    var name = namedRanges[i].getName();
    var value = getValuesOfNamedRange(name);
    Logger.log(name);
    Logger.log(value);
    eval('var' + name + '=' + value); 

  }

  return
}
  • 0
    Вы бы лучше опубликовать часть вашего кода в вашем вопросе, чтобы мяч заработал ...
  • 0
    Спасибо Ли, я добавил немного кода.
Показать ещё 1 комментарий
Теги:
google-sheets

1 ответ

1
Лучший ответ

Возможно, ваш код работал, но переменные, которые вы создаете, будут находиться только внутри функции convertNamedRangeToVariables.

Лично я бы создал объект для данных (вне функции), чтобы он был глобальным:

var data = {};

function convertNamedRangeToVariables() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = SpreadsheetApp.getActiveSheet();
  var sa = SpreadsheetApp.getActive();

  function getValuesOfNamedRange(x) 
  {
    return ss.getRangeByName(x).getValues();
  }

  var namedRanges = sa.getNamedRanges();

  for (var i = 0; i < namedRanges.length; i++) 
  {
    var name = namedRanges[i].getName();
    var value = getValuesOfNamedRange(name);
    data[name] = value;
  }
}

После того, как вы convertNamedRangeToVariables функцию convertNamedRangeToVariables вы можете обратиться к своим данным:

console.log( data["aNamedRange"] );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню