Используйте строковые переменные в методе getRange - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь вызвать следующее:

var range5 = SpreadsheetApp.getActiveSheet().getRange(range1:range3);

, где range1 = "C590" (строковое значение) и range3 = "O594" (строковое значение) (найдено ранее в скрипте)

Но я получаю сообщение об ошибке:

Отсутствует) после списка аргументов

для строки range5.Есть ли способ передать две строки как диапазон?

1 Ответ

0 голосов
/ 21 октября 2018

У спрашивающего есть проблема с этой строкой кода
var range5 = SpreadsheetApp.getActiveSheet().getRange(range1:range3);

Эта строка кода сработала бы:

var range5 = SpreadsheetApp.getActiveSheet().getRange(range1+":"+range3);

ОсновнойЗдесь дело в том, как переменные добавляются / присваиваются команде, и как добавляется разделитель между переменными.


Существует как минимум четыре варианта для getRange, но самым основным является "getRange"('адрес ячейки / диапазона') ".Как показано выше, возможно объединить переменные и разделитель для создания допустимого диапазона.

Но есть , есть другие варианты.В этом сценарии наиболее очевидным является getRange(row, column, numRows, numColumns).Это предполагает целочисленные параметры, но getRow и getColumn могут использоваться для разбиения каждой строки.

Приведенный ниже код является примером управления диапазонами как строками.
Каждая строка используется отдельнодля создания параметров определенного диапазона.
Шаг # 1 - строка для range1 используется в getRange.Это позволяет ...
Шаг # 2 и # 3 - получить целые числа строки и столбца для диапазона.
Шаг # 4 - повторить для range3
Шаг # 5 - Теперь мы можем получить range5 с помощью "getRange"(строка, столбец, количество строк, количество столбцов) ".Значения для этого поставляются / рассчитываются по шагам с 1-го по 4-й.

function so_52759685() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheets()[0];
    var range1 = "C590";
    var rangeone = sheet.getRange(range1);
    var rangeonerow = rangeone.getRow();
    var rangeonecolumn = rangeone.getColumn();

    Logger.log("RANGE1: " + range1 + " - row = " + rangeonerow + ", and the column number = " + rangeonecolumn); // DEBUG


    var range3 = "O594";
    var rangethree = sheet.getRange(range3);
    var rangethreerow = rangethree.getRow();
    var rangethreecolumn = rangethree.getColumn();
    Logger.log("RANGE3: " + range3 + " - row = " + rangethreerow + ", and the column number is " + rangethreecolumn); //DEBUG

    var range5 = sheet.getRange(rangeonerow, rangeonecolumn, rangethreerow - rangeonerow + 1, rangethreecolumn - rangeonecolumn + 1)
    var range5Rows = range5.getNumRows();
    var range5Columns = range5.getNumColumns();
    Logger.log("RANGE5: " + range5.getA1Notation() + " - Number of rows = " + range5Rows + ", and number of columns" + range5Columns);

}

В качестве альтернативы можно использовать именованный диапазон .
Тот же процесс применяется толькочто:
1 - диапазон1 и диапазон3 - это именованные диапазоны, присвоенные C590 и O594 соответственно.
2 - вместо объявления строковых литералов мы используем GetNamedRange.

function so_5275968502() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheets()[0];
    var rangeone = ss.getRangeByName("range1");
    Logger.log("range one is " + ss.getRangeByName("range1").getA1Notation()); //DEBUG
    var rangeonerow = rangeone.getRow();
    var rangeonecolumn = rangeone.getColumn();

    Logger.log("RANGE1: " + rangeone.getA1Notation() + " - row = " + rangeonerow + ", and the column number = " + rangeonecolumn); //DEBUG

    var rangethree = ss.getRangeByName("range3");
    Logger.log("range three is " + ss.getRangeByName("range3").getA1Notation()); //DEBUG
    var rangethreerow = rangethree.getRow();
    var rangethreecolumn = rangethree.getColumn();
    Logger.log("RANGE3: " + rangethree.getA1Notation() + " - row = " + rangethreerow + ", and the column number is " + rangethreecolumn); //DEBUG

    var range5 = sheet.getRange(rangeonerow, rangeonecolumn, rangethreerow - rangeonerow + 1, rangethreecolumn - rangeonecolumn + 1)
    var range5Rows = range5.getNumRows();
    var range5Columns = range5.getNumColumns();
    Logger.log("RANGE5: " + range5.getA1Notation() + " - Number of rows = " + range5Rows + ", and number of columns" + range5Columns); //DEBUG

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