Javascript 如何使用Google Apps脚本使用主列表更新特定列中特定范围内的数据验证?
我有两个工作表,都有一个列,在G/#7列中使用数据验证,从第8行开始,一直向下。我必须每隔一段时间编辑一次数据验证,并匹配两张表的列表。这可能很烦人,因为它从第8行开始,一直到第1000+行,两张纸都需要这样做 如何使其成为第三张名为“设置”的工作表,其中有一个主列表,其中在一列中有一个行列表,每行接收数据并自动更新工作表1和工作表2的数据验证列表 e、 g 并对表1和表2的第7列第8+行(一直向下)进行数据验证:Javascript 如何使用Google Apps脚本使用主列表更新特定列中特定范围内的数据验证?,javascript,google-apps-script,google-sheets,google-api,Javascript,Google Apps Script,Google Sheets,Google Api,我有两个工作表,都有一个列,在G/#7列中使用数据验证,从第8行开始,一直向下。我必须每隔一段时间编辑一次数据验证,并匹配两张表的列表。这可能很烦人,因为它从第8行开始,一直到第1000+行,两张纸都需要这样做 如何使其成为第三张名为“设置”的工作表,其中有一个主列表,其中在一列中有一个行列表,每行接收数据并自动更新工作表1和工作表2的数据验证列表 e、 g 并对表1和表2的第7列第8+行(一直向下)进行数据验证: johndoe、Jane Doe、Steve Smith、Stacy Smith
johndoe、Jane Doe、Steve Smith、Stacy Smith
如果添加了名称,则会将其添加到数据验证列表/更新列表。如果删除了名称,则会将其从数据验证列表中删除
--提供的照片示例:
我们有一个使用数据验证列出项目的列
我们还有一份包含所有这些项目的“总清单”。如果我更新“主列表”,我希望数据验证得到更新,这样我就不必进入数据验证设置,只需更新我的列表,因为它总是在变化,这样我就可以更新该列的下拉列表。我相信你的目标如下
- 更新“主”工作表时,您希望更新“成员”工作表上“D”列(范围为“D2:D”)处的数据验证规则
- 您希望使用谷歌应用程序脚本实现这一点
function onEdit(e) {
const masterlistSheetName = "Master"; // Please set the sheetname.
const membersSheetName = "Members"; // Please set the sheetname.
const ss = e.source;
const master = ss.getActiveSheet();
if (master.getSheetName() != masterlistSheetName) return;
const range = master.getRange("A2:A" + master.getLastRow());
const members = ss.getSheetByName(membersSheetName);
const dataValidation = members.getRange("D2").getDataValidation().copy().requireValueInRange(range).build();
const length = members.getRange("D2:D").getDataValidations().filter(String).length;
members.getRange("D2:D" + (length + 1)).setDataValidation(dataValidation);
}
注:
- 此示例脚本由OnEdit触发器运行。因此,当您在脚本编辑器中直接运行函数
时,会发生错误,因为未使用事件对象。请注意这一点。onEdit
- 此示例脚本假定数据验证规则的值被放入“主”工作表中的单元格“A2:A”。如果要更改此脚本,请修改上述脚本
- 此示例脚本假定将数据验证规则放入单元格“D2:D”,而不包含空行。如果要更改此脚本,请修改上述脚本
function onEdit(e) {
const masterlistSheetName = "Master"; // Please set the sheetname.
const membersSheetName = "Members"; // Please set the sheetname.
const ss = e.source;
const master = ss.getActiveSheet();
if (master.getSheetName() != masterlistSheetName) return;
const range = master.getRange("A2:A" + master.getLastRow());
const members = ss.getSheetByName(membersSheetName);
const dataValidation = members.getRange("D2").getDataValidation().copy().requireValueInRange(range).build();
const length = members.getRange("D2:D").getDataValidations().filter(String).length;
members.getRange("D2:D" + (length + 1)).setDataValidation(dataValidation);
}