@pteslenko7

Как в гугл таблице скопировать данные из одного листа в другой?

Опишу подробно ситуацию. У меня есть таблица гугл. В ней 2 листа. В первом листе данные регулярно меняются. Есть список участков (это неизменяемые данные), дальше к участку может быть прикреплен человек, и есть дата начала и дата завершения работ (это изменяемые данные). Участок может прорабатываться разными людьми в разные даты. Поэтому есть необходимость вести своего рода журнал учета, когда и кем брался определенный участок. Второй лист должен служить как журнал записи.

Нужно сделать так, чтобы когда по определенному участку добавлялся человек + добавлялась дата начала и завершения работ, тогда эти данные (вместе с номером участка) переносились на второй лист. И вставлялись в последнюю пустую ячейку. И так до бесконечности. Просто журнал записей.

Этим скриптом я получил доступ к листу 1 и 2, получил данные из активных ячеек листа 1. Но не могу понять как мне их ставить в лист 2.

Не судите строго, скрипт пишу первый раз

function myFunction(){
  var list1 = SpreadsheetApp.getActiveSpreadsheet(); //лист откуда берем данные
  var activCell = list1.getActiveSheet().getActiveCell(); //определение активной ячейки  
  var activNum = activCell.getRow(); //номер активной ячейки
  
  var number = list1.getActiveSheet().getRange(activNum, 1).getValue(); // номер участка
  var name = list1.getActiveSheet().getRange(activNum, 2).getValue(); // имя человека
  var date1 = list1.getActiveSheet().getRange(activNum, 4).getValue(); // дата начала работ
  var date2 = list1.getActiveSheet().getRange(activNum, 6).getValue(); // дата завершения работ
  
  var list2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Журнал вода данных"); //лист куда вставляем данные
}
  • Вопрос задан
  • 3805 просмотров
Решения вопроса 1
joeberetta
@joeberetta
Читай: https://epdf.pub/google-for-dummies.html
function myFunction(){
  var list1 = SpreadsheetApp.getActiveSpreadsheet(); //лист откуда берем данные
  var activCell = list1.getActiveSheet().getActiveCell(); //определение активной ячейки  
  var activNum = activCell.getRow(); //номер активной ячейки
  
  var number = list1.getActiveSheet().getRange(activNum, 1).getValue(); // номер участка
  var name = list1.getActiveSheet().getRange(activNum, 2).getValue(); // имя человека
  var date1 = list1.getActiveSheet().getRange(activNum, 4).getValue(); // дата начала работ
  var date2 = list1.getActiveSheet().getRange(activNum, 6).getValue(); // дата завершения работ
  
  var list2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Журнал вода данных"); //лист куда вставляем данные


//Вот как делается на примере номера участка
  var lastEmptyRow = list2.getLastRow() + 1;
  list2.getRange(lastEmptyRow, 1).value = number;
//Дальше по аналогии для оставшихся данных
  
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Можно использовать метод Range.copyTo()

function myFunction() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet(); //лист откуда берем данные
  var activeRow = list1.getActiveSheet().getActiveCell().getRow(); //номер активной ячейки

  var destSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Журнал ввода данных");
  var lastRow = destSheet.getLastRow();
  destSheet.insertRowAfter(lastRow);
  var destRow = lastRow + 1;
  
  function copyCell(colFrom, colTo) {
    sourceSheet.getRange(activeRow, colFrom).copyTo(destSheet.getRange(destRow, colTo));
  }
                                                                                                      
  copyCell(1, 1); // номер участка
  copyCell(2, 2); // имя человека
  copyCell(4, 3); // дата начала работ
  copyCell(6, 4); // дата завершения работ
}


Добавить вызов этой функции в собственное доп. меню, можно так:
function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('Работа с Журналом')
      .addItem('Копировать в журнал', 'myFunction')
      .addToUi();
}
Ответ написан
@pteslenko7 Автор вопроса
а можно сделать так, чтобы этот скрипт запускался только когда заполнены все поля для переноса?

То есть если в строке 2 заполнен и номер, и имя, и дата начала, и дата завершения, тогда скрипт переносит данные из этой строки на лист 2.

Точно также и для остальных участков. Если в строке 3 заполнен и номер, и имя, и дата начала, и дата завершения, тогда скрипт переносит данные из этой строки на лист 2.

Если какая-то из ячеек не заполнена, тогда данные не переносятся.
Ответ написан
Ваш ответ на вопрос

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

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