我在Google SpreadSheets上使用Google Apps脚本,我正在尝试在我的数组成员上使用split方法,我收到此错误:“TypeError:无法调用未定义的方法”split“。
这是我的代码:
function myFunction(range) {
var Ocurrences=[];
range.forEach(function(row) {
var tokens=row.toString().split(' ');
var hour=tokens[4].split(':')[0];
Ocurrences.push(hour);
});
return Ocurrences;
}
正常的猜测是令牌[4]没有定义,但我已经尝试读取它的值并且它被定义并且它是一个字符串。希望你能帮帮我。
修改 我从电子表格中的单元格调用函数,其中(A1:A)作为参数,这引起了麻烦。我已经自己回答了我的问题以获取更多细节。
答案 0 :(得分:0)
您的特定环境中肯定会发生一些事情。您的代码按原样适用于我:
console.log(myFunction(["first second third forth 8:25", "first second third forth 5:25"]));
function myFunction(range) {
var Ocurrences=[];
range.forEach(function(row) {
var tokens=row.toString().split(' ');
var hour=tokens[4].split(':')[0];
Ocurrences.push(hour);
});
return Ocurrences;
}
console.log(myFunction(["first second third forth 8:25", "first second third forth 5:25"]));
function myFunction(range) {
var Ocurrences=[];
range.forEach(function(row) {
var tokens=row.toString().split(' ');
var hour=tokens[4].split(':')[0];
Ocurrences.push(hour);
});
return Ocurrences;
}
答案 1 :(得分:0)
我解决了这个问题。这是因为我将我的代码作为谷歌电子表格自定义功能运行,我给它的范围是整个专栏(A1:A)。但由于列中有一些空白行导致一些未定义的值到达函数而没有注意到它。
一种解决方案是给出确切的填充行范围(在我的例子中为A1:A229)。
更好的解决方案是在拆分调用之前添加令牌[4]的验证,以确保没有未定义的值通过。这样,该函数将支持未定义的单元格范围。
以下是我使用的代码:
function myFunction(range) {
var Ocurrences=[];
range.forEach(function(row) {
var tokens=row.toString().split(' ');
if(tokens[4]){
var hour=tokens[4].split(':')[0];
Ocurrences.push(hour);
}
});
return Ocurrences;
}