我有一个函数,如果我只调用一次就可以正常工作,但是当我在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循环工作,第二次给我上述错误。感谢您阅读本文,我希望很清楚。
答案 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还不错。好吧,我很好。”
重命名你的变量,你应该没问题。