Копирование диапазона таблицы через openById и вставка в ближайшую пустую строку в активной таблице

Всем печенек! Не могу согласовать диапазон между тем, что копирую и тем куда вставляю. Что необходимо : копировать на удаленной таблице диапазон A1:A(либо до последней записи в столбце A) и вставка в активную таблицу от позиции текущей ячейки(проще говоря getCurrentCell()). Поправьте мой код пожалуйста и напишите готовое решение. Сам не разберусь.

function myFunction() {
// Получаем объект с активной (открытой в данный момент) таблицей
var s = SpreadsheetApp.getActiveSpreadsheet();
// Получаем объект с таблицей по ID
var ss = SpreadsheetApp.openById('id');
// Получаем объект с диапазоном ячеек
var range = ss.getRange("List1!A1:A");
// Массив с содержимым ячеек, входящих в диапазон
var values = range.getValues();
var lastRowIndex = s.getLastRow();
var r = 'A'+parseInt(lastRowIndex+1) + ':A';
s.getRange(r).setValues(values);
}
Ошибка  
Exception: The number of rows in the data does not match the number of rows in the range. The data has 999 but the range has 997.
myFunction  @ Код.gs:16

Ответы (1 шт):

Автор решения: Михаил Носаев
const dataSheetId = 'тут ID листа откуда берем данные'
const dataSheetName = 'List1'
const dataRange = 'A1:A'
        
function myFunction() {
      // защита от дурака)
      let answer = Browser.msgBox('Добавить данные?', Browser.Buttons.YES_NO);
      if (answer == 'yes') {
        // Получаем активный (в данный момент) лист наверное с таблицей 
        var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
        // Лист с данными
        var ds = SpreadsheetApp.openById(dataSheetId).getSheetByName(dataSheetName);
        // Получаем данные
        var values = ds.getRange(dataRange + ds.getLastRow()).getValues();
        // немного магии, eсли копируемый диапазон больше 1 столбца, вводим в map r[0], r[1] и т.д., где r[0] первый столбец
        var arr = values.map(function (r) { return [r[0]]; });
        // столбец 1 добавляем данные, если больше одного столбца s.getRange(s.getActiveCell().getRow(), s.getActiveCell().getColumn(), arr.length, arr[0].length).setValues(arr);
       s.getRange(s.getActiveCell().getRow(), s.getActiveCell().getColumn(), arr.length, 1).setValues(arr); // 
      }
    }
→ Ссылка