Я собираю калькулятор цен для работы в 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
}
Возможно, ваш код работал, но переменные, которые вы создаете, будут находиться только внутри функции 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"] );