第二次调用函数时出错

时间:2014-03-31 14:08:21

标签: javascript google-apps-script

我有一个函数,如果我只调用一次就可以正常工作,但是当我在for循环中重复调用它时,我得到以下错误:

TypeError:getNamedRange不是函数,它是字符串。

对此错误进行搜索可以让我知道这是一个javascript错误,而不是Google Apps脚本错误。我没有使用javascript,但我怀疑它可能与我如何从函数返回值有关。

这是调用函数的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var baseSheet = ss.getSheetByName("Base");

var catCol = 9;
var riskAreaColumn = 10;

var numRows = baseSheet.getDataRange().getNumRows();

// I am not using this var, should I be?
var data = baseSheet.getDataRange().getValues();

var cell;
var rangeName;
var range;
var rule;

for(var i=2; i<numRows; i++){

  cell = baseSheet.getRange(i, riskAreaColumn);

  rangeName = getNamedRange("CategoryRiskRange",baseSheet.getRange(i, catCol).getValue());

  range = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(rangeName);

  rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();

  cell.setDataValidation(rule);

  }

  SpreadsheetApp.flush();
}

这是被调用的函数:

function getNamedRange(categoryRange, category) {

var categoryList = SpreadsheetApp.getActive().getRangeByName(categoryRange).getValues();
for (var i = 0; i < categoryList.length; i++) {

  if (categoryList[i][0] == category) {
    getNamedRange = categoryList[i][1];
    return getNamedRange;
  }
}
}

第一次通过for循环工作,第二次给我上述错误。感谢您阅读本文,我希望很清楚。

2 个答案:

答案 0 :(得分:3)

你在这里覆盖了函数定义:

getNamedRange = categoryList[i][1];

这将有效:

 if (categoryList[i][0] == category) {
    return categoryList[i][1];
  }

答案 1 :(得分:2)

Javascript不会解释事物,直到它告诉它们,并且非常乐意在你告诉它时重新定义事物。

第一次见到

function getNamedRange(categoryRange, category) 

并说“哦,一个功能!很酷!”但是在那个函数中,你有一行

getNamedRange = categoryList[i][1];

它说:“哦,所以现在getNamedRange还不错。好吧,我很好。”

重命名你的变量,你应该没问题。