Как я могу увеличить диапазон Google Sheets через getRange? - PullRequest
0 голосов
/ 06 сентября 2018
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 строкам песни в моей электронной таблице и не называет каждую строку, «Песня 3» для строки A3-Q3 и т. Д. (Начиная со строки 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 голосов
/ 06 сентября 2018

Вы ищете что-то вроде этого, я полагаю:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...