Копирование диапазона таблицы через 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); //
}
}