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);
}
}
答案 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);
+
符号将Q3
和3
连接在一起,得到Q33
。但是,在我的代码中,您将列定义为静态文本,将行号定义为变量。
var r = ss.getRange('A'+i+':Q'+i);
因此读为(i = 3):
var r = ss.getRange('A'+3+':Q'+3);
产生A3:Q3
希望有帮助。