Синтаксис Google Sheets get.range, если диапазон частично сформирован из значения ячейки

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

У меня есть счетчик в ячейке F26 , который начинается с 0 и увеличивается на единицу каждый раз, когда под ним добавляется новая строка с текстом. При первом выполнении скрипта он скопирует значения формул в F27:G27 to F27:G27 (и добавит значение 0 из счетчика и, таким образом, будет в строке 27 ). При следующем выполнении он примет значение из F26 , то есть сейчас 1 , и добавит его к номеру строки 27 , чтобы выполнить следующее выполнение F28:G28 F28:G28 и так далее.

 function test() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('F27:G27').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('G27'));
  spreadsheet.getRange('F27:G27').copyTo(spreadsheet.getActiveRange(), 
  spreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
  

Каков был бы правильный синтаксис для этого?

Ответ №1:

Объяснение:

Алгоритмически, вот шаги, которые вам нужно выполнить:

  1. Получить текущий счетчик из ячейки F26 :

    var counter = sheet.getRange('F26').getValue();

  2. Используйте getRange(строка, столбец, numRows, numColumns) и установите в качестве row начальной строки 27 плюс текущее значение counter :

    var range = sheet.getRange(27 counter,6,1,2);

  3. Скопируйте только содержимое / значения:

    range.copyTo(range, {contentsOnly:true});

  4. Увеличьте счетчик на 1 :

    sheet.getRange('F26').setValue(sheet.getRange('F26').getValue() 1);


Фрагмент:

 function test() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('Sheet4'); // change that to your sheet name
  var counter = sheet.getRange('F26').getValue(); // get the counter
  var range = sheet.getRange(27 counter,6,1,2); // start from 27 plus counter
  range.copyTo(range, {contentsOnly:true}); // copy the values
  sheet.getRange('F26').setValue(sheet.getRange('F26').getValue() 1); // increase F26 by 1
};