是否可以在谷歌脚本中引用离散范围?

时间:2013-08-16 01:27:38

标签: google-apps-script google-sheets

我有一个谷歌脚本功能,可以从谷歌电子表格中获取范围。

function getGrainWeights() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  return range = ss.getRangeByName("Brew_Grains");
}

此范围由另一个函数处理,该函数修改并添加范围中的值。

“Brew_Grains”是我的电子表格中的命名区域,但我想用一个离散范围替换它,例如“B2,C3,D10”等。这可能,还是有一些解决方法? 干杯

2 个答案:

答案 0 :(得分:3)

除了使用getRangeByName(name)指定的范围外,您还可以通过以下方式获取范围。

Get a range

您可以找到documentation

<强>更新

您想要做的事情的解决方法可能是:

  ...
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var ranges = [];
  var range = ss.getRange('B2:C3');
  ranges.push(range);
  range = ss.getRange('D10');
  ranges.push(range);
  processingFunction(ranges);
  ...

然后,您可以将数组(范围)传递给任何其他函数进行处理。

答案 1 :(得分:0)

你不能(据我所知)加入两个Range对象。但是,如果您有一个可在多维数组上运行的自定义函数,则可以将范围转换为数组并将其连接起来。

例如:

function SUM_RANGE_COLUMN(myRange,colIndex){
  var val,sum=0;
  for (var i=0;i<myRange.length;i++) if (val=myRange[i][colIndex]) sum+=val;
  return sum;
}

function UNION(range1,range2){
  return range1.concat(range2);
}

使用上述自定义功能,您可以在电子表格中写下:

=SUM_RANGE_COLUMN( UNION(E4:F5,E9:F12), 1 )

要将两个真实范围转换为数组,请使用getValues()

function joinRanges( range1, range2 ){
  return range1.getValues().concat( range2.getValues() );
}