在Google表格中使用命名范围作为变量

时间:2018-08-04 20:43:38

标签: javascript google-sheets

我正在为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
}

1 个答案:

答案 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"] );