Как я могу автоматически заполнить диапазон из другой вкладки на основе выбора проверки данных в Google Sheets? - PullRequest
0 голосов
/ 20 февраля 2020

Я давно искал информацию об этом, но, похоже, ничего не работает. Я надеюсь, что я собираюсь объяснить это правильно, но здесь идет ... У меня есть настройка проверки данных (ячейка G31 на вкладке «Отслеживание братства».) В зависимости от того, какая опция выбрана, я хочу, чтобы она извлекала данные из определенного диапазон на другой вкладке на том же листе («ВСЕ Этапы + Яма».) Я поместил ссылку на лист внизу.

Например, на вкладке «Отслеживание братства», ячейка G31, давайте скажем, я выбираю опцию Stage 1. Затем, начиная с ячейки C33, я бы хотел, чтобы она автоматически заполняла данные из ячеек B3: G21 на вкладке «ALL Stages + Pit». Кроме того, повторите то же самое для извлечения опций этапа 2 из «Отслеживания стипендий», опций извлечения ячеек H3: M21 и этапа 3 из «Отслеживания стипендий», ячеек N3-S21 и автоматического заполнения, начиная с ячейки C33, как данные этапа 1. Опция «Pit», я хотел бы получить данные из вкладки «PIT Sheet» из ячеек A2-F17 и автоматически заполнить, начиная с ячейки C33. Таким образом, в основном, какой бы вариант не был выбран, он извлекает данные из диапазонов, указанных выше, и автоматически заполняет соответствующие данные, начиная с ячейки C33.

Надеюсь, я объяснил все это достаточно. Я хотел бы получить информацию о том, как все это сделать, или это невозможно из-за способа настройки данных?

Ссылка на лист: https://docs.google.com/spreadsheets/d/1KYSiVggIm7KIKxpJMnUhldrzsIaETCqyjOWJ1a9k1cI/edit?usp=sharing

Изображения :

вкладка «Отслеживание стипендий»

enter image description here

вкладка «Все этапы + яма»: Данные этапов

enter image description here

Вкладка «ВСЕ этапы + яма»: данные Pit

enter image description here

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

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

  1. Установить скрипт в редактор скриптов.
  2. Вы не можете запустить этот скрипт из редактора сценариев, поскольку для него требуется объект события триггера onEdit.
  3. Я добавил сценарий, чтобы сделать его устанавливаемым триггером. Если вы запускаете функцию с именем 'creatOnMyEditTrigger ()' только один раз, чтобы создать только один триггер, то функция должна начать реагировать всякий раз, когда пользователь редактирует G31, и значение равно 'Этап 1';

код:

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Fellowship Tracking')return;
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 1') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('B3:G2');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }
}

function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}
0 голосов
/ 24 февраля 2020

Решение

Вот полный разъясненный код для решения этой проблемы. Это решение предоставлено вам @Cooper, который установил путь, по которому следует выполнить остальные необходимые функции.

function onMyEdit(e) {
  // gets the sheet changes have been made
  var sh=e.range.getSheet();
  // only look for changes on Fellowship Tracking as there is where we will be changing our "stages" cell
  if(sh.getName()!='Fellowship Tracking')return;
  
  // If Stage 1 is selected
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 1') {
  // get the right range from the right sheet for stage1 
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('B3:G21');
  // get range where we want to populate the information
    var desrg=sh.getRange('C33');
 // populate the information
    srcrg.copyTo(desrg);
  }
  
    // If Stage 2 is selected
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 2') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('H3:M21');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }  
  
   // If Stage 3 is selected
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='Stage 3') {
    var srcrg=e.source.getSheetByName('ALL Stages+Pit').getRange('N3:S21');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }  
  
   // If PIT is selected
  if(e.range.columnStart==7 && e.range.rowStart==31 && e.value=='PIT') {
    var srcrg=e.source.getSheetByName('PIT Sheet').getRange('A2:F17');
    var desrg=sh.getRange('C33');
    srcrg.copyTo(desrg);
  }    
  
}

// run this function to start the auto-complete programme
function createOnMyEditTrigger() {
  var ss=SpreadsheetApp.getActive();
// runs the function above as an onEdit function on the specfic spreadhseet
  ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss.getId()).onEdit().create();
}

Дополнительную информацию о том, как отследить изменения в листах, можно проверить с помощью onEdit () здесь

.
...