复制并返回函数中的修改范围

时间:2012-11-29 19:59:04

标签: google-apps-script google-spreadsheet-api

我的场景是:我想编写一个函数,可以从一个范围中删除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不存在。

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

2 个答案:

答案 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对象。