簡體   English   中英

如何使用帶有 Google Apps 腳本的主列表更新特定列中特定范圍的數據驗證?

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

我有兩張紙,都有一列在 G/#7 列中使用數據驗證,從第 8 行開始一直向下。 我必須每隔一段時間編輯一次數據驗證並匹配兩張表的列表。 這可能很煩人,因為它從第 8 行開始到第 1000+ 行,並且需要為兩張紙完成。

你如何做到這一點,以便你有一個名為“設置”的第三張表,其中將有一個主列表,其中一列中將有一個行列表,並且對於每一行,它獲取數據並自動更新數據驗證列表第一張和第二張都有嗎?

例如


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

它對表格 1表格 2的第 7 列、第 8 行+(一直向下)進行數據驗證,如下所示:

John Doe,Jane Doe,Steve Smith,Stacy Smith

如果添加了名稱,它會將其添加到數據驗證列表/更新列表中。 如果名稱被刪除,它會從數據驗證列表中刪除它。

-- 提供的照片示例:

我們有一列使用數據驗證來列出項目。

我們還有一個包含所有這些項目的“主列表”。 如果我更新該“主列表”,我希望更新數據驗證,因此我不必將 go 放入數據驗證設置,但只更新我的列表,因為它總是在變化,所以我可以更新該列的下拉列表.

我相信你的目標如下。

  • 當“主”工作表更新時,您想更新“成員”工作表上“D”列(范圍為“D2:D”)的數據驗證規則。
  • 您想使用 Google Apps 腳本實現此目的。

在這種情況下,我想建議使用 OnEdit 觸發器運行腳本。

示例腳本:

在使用此腳本之前,請設置“Master”和“Members”工作表的工作表名稱。 根據您的問題,我無法理解正確的工作表名稱。 當您想運行腳本時,請更新“主”表的單元格。 這樣,“成員”表上單元格“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 觸發器運行。 所以當你在腳本編輯器直接運行function onEdit時,由於沒有使用事件object而出現錯誤。 請注意這一點。
  • 此示例腳本假設您將數據驗證規則的值放入“主”表中的單元格“A2:A”中。 當你想改變它時,請修改上面的腳本。
  • 此示例腳本假設您的數據驗證規則被放置在沒有空行的單元格“D2:D”中。 當你想改變它時,請修改上面的腳本。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM