【发布时间】:2026-02-03 00:35:01
【问题描述】:
代码如下:
var sheet = spreadsheet.getSheetByName("Timesheet");
sheet.getRange('B27').setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange('TaskItems'), true)
.build());
上面的代码成功地在单元格 B27 中创建了一个与命名范围“TaskItems”匹配的数据验证下拉菜单。但是,apps 脚本创建的数据验证规则使用的是“TaskItems”的实际地址,即 C2:1300,而不是“TaskItems”本身。因此,如果我将命名范围“TaskItems”的地址更新为 D2:1300,那么我的数据验证规则将不再有效,因为它们仍在使用 C2:1300。
我可以在每个单元格上手动将数据验证规则设置为命名范围“TaskItems”,即使“TaskItems”发生变化,一切都很好。但是,我无法让应用程序脚本使用规则中的实际命名范围,而不是创建规则时命名范围的地址。
我尝试用这样的字符串切换范围对象:
var sheet = spreadsheet.getSheetByName("Timesheet");
sheet.getRange('B27').setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange('TaskItems', true)
.build());
但我收到一条错误消息,指出 requireValueInRange 不接受字符串。
有谁知道如何让应用程序脚本使用数据验证规则中的实际命名范围?
【问题讨论】:
-
你可能想把这个
.requireValueInRange(spreadsheet.getRange('TaskItems'), true)改成这个.requireValueInRange(spreadsheet.getRangeByName('TaskItems'), true) -
我有时会让我的命名范围比需要的大一点,这样我就可以通过编程方式添加它们而无需更改范围大小。
-
堆栈片段应仅用于可执行的 HTML/CSS/JavaScript
-
@Cooper,这是一个我没有考虑过的好主意。我今天早上尝试了它,但不幸的是它产生了相同的结果——它不是在规则中使用实际的命名范围,而是应用地址。我明白你的意思是让命名范围更大,以便可以通过编程方式扩展它们。我有时通过使用应用程序脚本在范围内插入行来实现这一点,以便它自动扩展引用。然而,在这里我希望使用命名范围。
-
您可以尝试在每次更改“TaskItems”地址时清除旧验证并设置一个新验证
标签: validation google-apps-script google-sheets named-ranges