我的场景是:我想编写一个函数,可以从一个范围中删除3个最低元素,并返回要在Google Spreadsheets中处理的修改范围。我对Google App脚本完全不熟悉,所以我的代码非常糟糕:
function removeWorse(range, n) {
var data = [];
for(var i = 1; i <= range.getNumColumns(); i++) {
data.push(range.getCell(1, i).getValue());
}
data.sort();
var range2;
range.copyTo(range2);
for(var i = data.length - 1; i >=n; i--) {
range2.getCell(1, i).setValue(data[i]);
Logger.log(2);
}
return range2;
}
第11行陷入困境:copyTo
不存在。
如何修改此代码以实际完成我的任务? :)
答案 0 :(得分:3)
我建议将范围作为值数组传递给函数(因此在电子表格单元格中输入例如=removeWorse(A1:K1;3)
),使用Javascript修改该范围,然后返回修改后的范围。这避免了在自定义函数中使用时出现问题的任何get或set调用。好像你正在使用水平范围,所以这样的事情应该有效:
function removeWorse(values, n) {
values[0].sort();
values[0].splice(0, n);
return values[0].reverse();
}
但请注意,sort()
在没有参数的情况下使用将返回lexographic sort(例如,9将被视为“大于”81)。您可以在sort()
中使用简单函数作为参数来解决此问题:
function removeWorse(values, n) {
values[0].sort(function(a, b) {return a - b});
values[0].splice(0, n);
return values[0].reverse();
}
答案 1 :(得分:0)
您的代码存在的问题是range.copyTo
函数需要另一个Range作为参数。在上面定义range2
时,它不是Range对象。