@kojuhov

Как копировать данные с одного листа на другой только в ячейки строк, в которых есть данные?

Помогите со скриптом для этого. Сейчас по скрипту копирую ячейку из одно листа во второй - только в одну строку (первую). Как дописать скрипт, что бы автоматом эта ячейка вставлялась во все строки, в которых есть данные?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Если коротко, то
  1. берете данные источника
  2. берете данные приемника
  3. обходите данные приемника по условию и заполняете пропуски
  4. записываете данные в приемник


Обновлено

654da1e519058534944401.gif

Еще немного видео-объяснений тут 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...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы