如何通过getRange增加Google表格范围?

时间:2018-09-06 12:22:56

标签: google-apps-script google-sheets

function namedRanges() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  for(var i=3; i<504; i++) {
    var r = ss.getRange('A3:Q3'+i);
    ss.setNamedRange('Song'+i, r);
  }
}

上面的公式并没有遍历电子表格中的500首歌曲行,而没有为每行命名,对于A3-Q3行命名为“歌曲3”,依此类推(从第3行开始,因为我在第1行和第2行中都有标题)如我所料。

所以我想做的是为工作表中的所有500首歌曲创建命名范围。

我期望的是

Name - Range
Song3 - Songs!A3:Q3
Song4 - Songs!A4:Q4
Song5 - Songs!A5:Q5
etc.

我得到的是什么

Song3 - Songs!A3:Q33
Song4 - Songs!A3:Q34
Song5 - Songs!A3:Q35
etc.

我花了两天时间试图通过搜索(徒劳地)来追查此事。我敢肯定这很容易。有人知道怎么做吗?

改进版本

下面是我正在使用的脚本的“更好的新版本”(还包含@Casper的答案)。它是“新的”和“更好的”,因为它计算工作表中的列数,而不是采用使其更灵活的静态值,因为它将为工作表的宽度命名一个范围,无论该宽度(以按列)。

function namedRanges() {
  var ss = SpreadsheetApp.openByUrl("url");
  var sheet = ss.getActiveSheet();
  //first column = 1
  var numcols = sheet.getLastColumn()
  Logger.log(numcols);
  for(var i=101; i<501; i++) {
    var r = sheet.getRange(i,1,1,numcols);//row, column, num rows, num cols
    ss.setNamedRange('Song'+i, r);
  }
}

1 个答案:

答案 0 :(得分:1)

您正在寻找类似我想的东西:

function namedRanges() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  for(var i=3; i<504; i++) {
    var r = ss.getRange('A'+i+':Q'+i);
    ss.setNamedRange('Song'+i, r);
  }
}

您的原始代码将行号附加到您的静态文本中:

var r = ss.getRange('A3:Q3'+i);

基本上读为:

var r = ss.getRange('A3:Q3'+3);

+符号将Q33连接在一起,得到Q33。但是,在我的代码中,您将列定义为静态文本,将行号定义为变量。

var r = ss.getRange('A'+i+':Q'+i);

因此读为(i = 3):

var r = ss.getRange('A'+3+':Q'+3);

产生A3:Q3

希望有帮助。