google-apps-script - 使用 Apps 脚本从 CSV 列表创建单元内下拉列表(Google 表格数据验证)
问题描述
我有一个有多个编辑器的电子表格。我使用逗号分隔所有用户的列表:
var users = ss.getEditors().toString();
与其让一个用逗号分隔的用户列表看起来很难看(我有 100 多个用户),不如设置一个下拉菜单来查看用户。为此,我写了这个:
function Dropdown() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var TestSheetName = "Test"
var TestSheet = ss.getSheetByName(TestSheetName);
var users = ss.getEditors().toString();
TestSheet.getRange(1, 1).setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.requireValueInList([users], true)
.build()
);
}
创建的下拉菜单显示带有逗号的列表。奇怪的是,当我右键单击单元格并转到“数据验证”时,我可以看到用户已正确输入。当我然后单击“确定”关闭菜单时,下拉菜单会自行更正,并且我的用户列表格式正确。
我的代码做错了吗?或者这是一个错误?
欣赏您的见解。
解决方案
的预期输入格式requireValueInList
是一个String
s 数组。正如你提到的,ss.getEditors().toString()
创建一个String
逗号分隔的电子邮件。然后将这个单一 对象包装String
到一个数组中,并将它传递给数据验证构建器。实际上,这类似于:
.requireValueInList(["email@example.com,email2@example.org"])
这与
.requireValueInList(["email@example.com", "email2@example.org"])
解决方案是不调用返回的对象.toString()
数组。相反,通过在每个用户上调用其方法来转换为,然后将这个s 数组传递给数据验证构建器:User
ss.getEditors()
User[]
String[]
getEmail()
String
var emails = ss.getEditors().map(function (user) { return user.getEmail(); });
/*...*/
.requireValueInList(emails, true)
/*...*/
应该足够了。
当您手动打开数据验证 UI 时,它会将输入的单个字符串拆分为许多不同的字符串,这就是为什么当您单击“确定”时,下拉菜单会按照您的预期填充。
推荐阅读
- grafana - 如何在 Grafana 模板变量中添加两个数据源?
- xml - 如何使用 Angular 以一种安全且美观的方式显示 XML 字符串
- java - 如何转换 Observable
转 JSON - go - gocql Query.Get() 与 Query.GetRelease()
- css - svg模糊效果,设置特定颜色
- python - 安装 Python 3.6.5 但在 Docker 中获得了 Python 3.6.6
- php - 多个登录页面模板php
- codeigniter - 为什么通过控制器重定向时出现状态码 303
- javascript - php echoed html中的Textarea无法正确发布值
- elgg - 如何在 elgg 上创建自动博客文章