Как мне получить getRange динамически, начиная с указанной ячейки c до конца листа? - PullRequest
0 голосов
/ 28 января 2020

Я пишу сценарий для копирования всех формул на моем листе со третьего ряда и далее, но я не хочу ничего менять в своем столбце D. Я пытался использовать getRange (#, #, #, #), но у меня есть эта ошибка: «Не удается найти метод getRange (число, число, число, число)».

Мне показалось, что эта ошибка означала, что я запускаю getRange в неправильном классе, но я использую getRange в той же функции, используя нотацию A1, и она работает.

Любая помощь в отладке этого кода будет принята с благодарностью. Я работаю над его исправлением в течение нескольких дней.

function Copy_Down() {

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Data_Template'), true);

  spreadsheet.getRange('A3:C').activate();
  spreadsheet.getRange('A3:C3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

  //it breaks here:
  spreadsheet.getRange(3,5,spreadsheet.getLastRow(),spreadsheet.getLastColumn()).activate(); 
  spreadsheet.getRange(3,5,1,spreadsheet.getLastColumn()).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

  spreadsheet.getRange('A1:A1').activate();
};

1 Ответ

1 голос
/ 28 января 2020

Вы на самом деле вызываете getRange (число, номер, номер, номер) в неправильном классе, как вы и думали. Используемый вами класс " Spreadsheet " имеет 3 определения метода getRange () , но они принимают только нотацию A1 или имя именованного диапазона.

Метод getRange () , который принимает числа, является частью класса Sheet, представляющего один лист в электронной таблице.

Как правило, работать с указать c Лист, а не работать через активный лист.

Вам также необходимо принять во внимание, что getLastRow () и getLastColumn () возвращают числа, которые включают ваши начальные позиции, поэтому вам необходимо вычесть эти смещения.

Это будет выглядеть примерно так :

var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('Data_Template');
...
sheet.getRange(3,5,sheet.getLastRow()-2,sheet.getLastColumn()-4).activate(); 
sheet.getRange(3,5,1,sheet.getLastColumn()-4).copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...