【问题标题】:Using Named Ranges as Variables in Google Sheets在 Google 表格中使用命名范围作为变量
【发布时间】:2018-08-07 00:34:13
【问题描述】:

我正在为在 Google 表格中工作而编写一个定价计算器,我已经在 J​​S 中编写了一些函数。它们工作正常。

我遇到的问题是,我需要更少的代码来更改某些变量。

我有一个想法,即在单独的电子表格上使用带有所有“设置”的命名范围。获取这些单元格和值,并使用函数将它们转换为 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
}

【问题讨论】:

  • 你最好在你的问题中发布你的一些代码来让球滚动......
  • 谢谢李,我已经添加了一些代码。
  • 看我的回答...

标签: javascript google-sheets


【解决方案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"] );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多