如何根据 Google 工作表中的数据验证选择从另一个选项卡自动填充范围?

How can I auto-populate a range from another tab based on a Data Validation selection in Google Sheets?

一段时间以来我一直在寻找这方面的信息,但似乎没有任何效果。我希望我能正确解释这一点,但是这里...我有一个数据验证设置('Fellowship Tracking' 选项卡上的单元格 G31。)基于 selected 的任何选项,我想要它从同一 sheet ('ALL Stages+Pit') 的另一个选项卡上的某个范围内提取数据,我将 link 放在底部的 sheet 中。

例如,在 'Fellowship Tracking' 选项卡的单元格 G31 上,假设我 select 选项阶段 1。然后从单元格 C33 开始,我希望它自动填充数据来自 'ALL Stages+Pit' 选项卡中的单元格 B3:G21。此外,对从 'Fellowship Tracking'、单元格 H3:M21 提取的第 2 阶段选项和从 'Fellowship Tracking'、单元格 N3-S21 提取的第 3 阶段选项重复相同操作,并像 Stage 一样从单元格 C33 开始自动填充1 数据。 'Pit' 选项,我想从单元格 A2-F17 的 'PIT Sheet' 选项卡中提取数据,并从单元格 C33 开始自动填充。所以基本上无论选择什么选项,它都会从上述范围中提取数据并自动填充从单元格 C33 开始的相应数据。

我希望我解释得够多了。我想获得有关如何执行所有这些操作的信息,或者由于数据设置方式而无法做到这一点?

Sheet Link: https://docs.google.com/spreadsheets/d/1KYSiVggIm7KIKxpJMnUhldrzsIaETCqyjOWJ1a9k1cI/edit?usp=sharing

图片:

'Fellowship Tracking' tab

'ALL Stages+Pit' tab: Stages data

'ALL Stages+Pit' tab: Pit data

复制范围从一个 sheet 到另一个 sheet 在同一个传播sheet

  1. 将脚本安装到脚本编辑器中。
  2. 您不能从脚本编辑器运行此脚本,因为它需要 onEdit 触发事件对象。
  3. 我添加了一个脚本,使其成为可安装的触发器。如果您 运行 名为 'creatOnMyEditTrigger()' 的函数只创建一个触发器,那么只要用户编辑 G31 并且值等于 'Stage 1';
  4. ,该函数就应该开始响应

代码:

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();
}

解决方案

这里是解决这个问题的完整说明代码。此解决方案由@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() 捕获工作表更改的更多信息here