function test() {
var id = PropertiesService.getScriptProperties().getProperty('FILEID')
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.openById(id).getRange('A1:A10');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range, true).build();
cell.setDataValidation(rule);
}
我需要从一个电子表格文件中获取一个范围,以在另一个文件中设置为数据验证,但它给出了一个错误:参数"=sheet!A1:A10"无效。我认为.getrange不会从一个文件运行到另一个文件。你能帮我吗?tks。
问题:
在Data validation
中指定的范围应与应用Data validation
的范围在同一个电子表格中。如果您尝试直接通过工作表UI添加它,您会注意到这一点(设置范围时,您只能从当前电子表格中选择工作表(。
解决方案:
正如评论中所建议的,实现这种行为的最佳方式是:
- 用源电子表格中的值创建一个数组
- 将
requireValueInList
验证规则设置为目标范围
您可以按照以下方式进行操作:
function dataValDifferentSS() {
var id = PropertiesService.getScriptProperties().getProperty('FILEID');
var range = SpreadsheetApp.openById(id).getSheetByName("source").getRange("A1:A"); // Change sheet name and range accordingly
var list = range.getValues().flat().filter(value => value !== ""); // Get 1D array from source range
var targetSheet = SpreadsheetApp.getActive().getSheetByName("target"); // Change sheet name accordingly
var cell = targetSheet.getRange("A1"); // Change A1 range accordingly
var rule = SpreadsheetApp.newDataValidation().requireValueInList(list, true).build();
cell.setDataValidation(rule);
}
注:
- 您应该相应地编辑源和目标图纸名称和范围(
source
、target
、A1:A
、A1
( - 我假设脚本已绑定到目标电子表格
- 您应该启用V8才能使该脚本工作
参考:
- DataValidationBuilder.requireValueInList(values,showDropdown(