Если коротко, то
- берете данные источника
- берете данные приемника
- обходите данные приемника по условию и заполняете пропуски
- записываете данные в приемник
Обновлено
Еще немного видео-объяснений тут
https://t.me/contributor_pw_chat/10562
Может копировать как фон, так и комментарии
Задачи, которые решаются в примере
Задача 1. Перенос данных
Необходимо перенести из листа в лист, если в C есть дата
function runMoveData() {
// Лист-источник
const frm = SpreadsheetApp.getActive().getSheetByName('Перенос или копирование строк. База');
// Лист-приемник
const to = SpreadsheetApp.getActive().getSheetByName('Перенос или копирование строк');
// Проверка для каждой строки: если 3й элемент дата, то переноси
const condition = (row) => !!row[2]?.getTime;
moveData_(frm, to, condition, { colors: true, notes: true });
}
Задача 2. Копирование данных
Необходимо скопировать из листа в лист, если в C есть дата и такой даты нет в приемнике
// Лист-источник
const frm = SpreadsheetApp.getActive().getSheetByName('Перенос или копирование строк. База');
// Лист-приемник
const to = SpreadsheetApp.getActive().getSheetByName('Перенос или копирование строк');
// Преобразователь в значение для сравнения
const toValue = (data) => (data?.getTime ? data.getTime() : data);
// Индекс приемника, то что в нем уже есть
const toIndex = to
.getDataRange()
.getValues()
.map((row) => toValue(row[2]));
// Проверка для каждой строки: если третий элемент дата и такого значения нет в примнике, то копируй
const condition = (row) => row[2]?.getTime && !toIndex.includes(toValue(row[2]));
moveData_(frm, to, condition, { colors: true, notes: true, leaveCopy: true });
Ссылка на Таблицу с кодом
https://docs.google.com/spreadsheets/d/1wJyI3ieRDN...