如何根据 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
- 将脚本安装到脚本编辑器中。
- 您不能从脚本编辑器运行此脚本,因为它需要 onEdit 触发事件对象。
- 我添加了一个脚本,使其成为可安装的触发器。如果您 运行 名为 'creatOnMyEditTrigger()' 的函数只创建一个触发器,那么只要用户编辑 G31 并且值等于 'Stage 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();
}
解决方案
这里是解决这个问题的完整说明代码。此解决方案由@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
一段时间以来我一直在寻找这方面的信息,但似乎没有任何效果。我希望我能正确解释这一点,但是这里...我有一个数据验证设置('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
- 将脚本安装到脚本编辑器中。
- 您不能从脚本编辑器运行此脚本,因为它需要 onEdit 触发事件对象。
- 我添加了一个脚本,使其成为可安装的触发器。如果您 运行 名为 'creatOnMyEditTrigger()' 的函数只创建一个触发器,那么只要用户编辑 G31 并且值等于 'Stage 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();
}
解决方案
这里是解决这个问题的完整说明代码。此解决方案由@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