如何使用带有 Google Apps 脚本的主列表更新特定列内特定范围的数据验证?

How to update data validation for a certain range within a specific column with a master list with Google Apps Script?

我有两个 sheet,它们都有一个使用列 G/#7 中的数据验证的列,从第 8 行开始一直向下。我必须每隔一段时间编辑一次数据验证并匹配两个 sheet 的列表。这可能很烦人,因为它从第 8 行开始向下到第 1000 行以上,并且需要为两个 sheets 完成。

如何才能让第三个 sheet 称为“设置”,其中会有一个主列表,其中一列中会有一个行列表,每一行都需要数据并自动更新 sheet 一个和 sheet 两个的数据验证列表?

例如


1 | Master List (Title)
2 | John Doe
3 | Jane Doe
4 | Steve Smith
5 | Stacy Smith

它对Sheet 1[= 的第 7 列第 8+ 行(一直向下)进行数据验证44=] 2 这样:

John Doe,Jane Doe,Steve Smith,Stacy Smith

如果添加了名称,它会将其添加到数据验证列表/更新列表。如果删除了名称,它会将其从数据验证列表中删除。

-- 提供的图片示例:

我们有一个列使用数据验证来列出项目。

我们还有一个包含所有这些项目的“主列表”。如果我更新那个“主列表”,我希望更新数据验证,这样我就不必进入数据验证设置,而只更新我的列表,因为它总是在变化,所以我可以为该列更新下拉列表.

我相信你的目标如下。

  • 您想在“成员”sheet 的“D”列(范围为“D2:D”)更新数据验证规则,当“大师”sheet 是已更新。
  • 您想使用 Google Apps 脚本实现此目的。

在这种情况下,我想建议 运行 使用 OnEdit 触发器的脚本。

示例脚本:

在使用此脚本之前,请设置“Master”和“Members”sheet的sheet名称。根据您的问题,我无法理解正确的 sheet 名称。当您想要运行脚本时,请更新“Master”的单元格sheet。由此,“成员”sheet 上单元格“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时,会因为没有使用事件对象而出错。请注意这一点。
  • 此示例脚本假定您的数据验证规则值已放入“Master”sheet 中的单元格“A2:A”。当你想改变这个的时候,请修改上面的脚本。
  • 此示例脚本假定您的数据验证规则已放入没有空行的单元格“D2:D”。当你想改变这个的时候,请修改上面的脚本。

参考文献: