validation - getRange 从一个文件到另一个文件进行新数据验证
问题描述
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);
}
我需要从一个电子表格文件中获取一个范围以在另一个文件中设置为 Datavalidation,但它给出了一个错误:参数“=sheet!A1:A10”无效。我认为 .getrange 不会从一个文件运行到另一个文件。你能帮我吗?tks。
解决方案
问题:
a 中指定的范围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以使该脚本正常工作。
参考:
推荐阅读
- python - 代码给出了正确的结果(显然),但也给出了 SettingWithCopyWarning: A value is trying to be set on a copy of a slice from DataFrame
- c - C语言中的简单字数
- qt - QLocalSocket:套接字访问错误(错误3)
- knex.js - knex 查询中缺少表名
- postgresql - 无法远程连接到 Postgres Docker 容器
- mysql - 插入不存在的行并使用先前的值
- python - 如何合并两个查询集 django
- c - 在 C 中: void* 是一种类型吗?
- javascript - CSS 在动态路由上不能与 vue js 一起使用
- javascript - 如何初始化Materialize js文件输入元素?