我正在为Google表格中的工作汇总价格计算器,并在JS中编写了一些函数。他们工作正常。
我遇到的问题是,我希望某人的代码较少以更改某些变量。
我想到了将命名范围与所有“设置”一起使用在单独的电子表格上的想法。使用函数获取这些单元格和值并将其转换为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 :(得分: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
函数后,您就可以引用您的数据了:
console.log( data["aNamedRange"] );