我有工作就好了第一,如果我把它只有一次,但是当我反复调用它内部的for循环中,我得到以下错误的函数:错误调用函数第二次
类型错误: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循环的作品,第二次给了我上述错误。感谢您阅读本文,我希望这很清楚。
我很欣赏你对javascript背后逻辑的解释。其他语言也一样吗?我认为我借用了其他语言的语法,或者我只是补充了它的语法?无论如何,谢谢。 –
Java和C++会抱怨重新分配*,因为它们被称为“强类型”。 Javascript和Python会很乐意让你做你所做的事情。只取决于语言。 *实际上,因为您必须在C++或Java中的函数内声明getNamedRange作为String,所以您可以避开重新分配,因为编译器会知道您指定的是哪个getNamedRange指向的位置以及你如何引用它。但你不能只是做getNamedRange = categoryList [i] [1];没有专门声明变量。 –