0

我的场景是这样的:我想编写一个函数,它可以从一个范围中删除 3 个最低元素,并返回要在 Google 电子表格中处理的修改后的范围。我对 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不存在。

如何修改此代码以实际完成我的任务?:)

4

2 回答 2

3

我建议将范围作为值数组传递给函数(因此在电子表格单元格中输入 eg =removeWorse(A1:K1;3)),使用 Javascript 修改该范围,然后返回修改后的范围。这避免了在自定义函数中使用时出现问题的任何 get 或 set 调用。好像您正在使用水平范围,所以这样的事情应该可以工作:

function removeWorse(values, n) {
  values[0].sort();
  values[0].splice(0, n);
  return values[0].reverse();
}

但请注意,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();
}
于 2012-11-29T22:29:03.977 回答
0

您的代码的问题是该range.copyTo函数需要另一个 Range 作为参数。当您range2在上面定义时,它不是 Range 对象。

于 2012-11-29T20:16:25.707 回答