Google apps script 使用应用程序脚本从CSV列表创建单元格内下拉列表(谷歌工作表数据验证)
我有一个有多个编辑器的电子表格。我得到一个所有用户的列表,使用逗号分隔:Google apps script 使用应用程序脚本从CSV列表创建单元格内下拉列表(谷歌工作表数据验证),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个有多个编辑器的电子表格。我得到一个所有用户的列表,使用逗号分隔: var users = ss.getEditors().toString(); 我想设置一个下拉菜单来查看用户,而不是用逗号分隔用户列表,这看起来很难看(我有100多个用户)。为此,我写了以下内容: function Dropdown() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var TestSheetName = "Test" var TestS
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()
);
}
创建的下拉菜单显示带有逗号的列表。奇怪的是,当我右键单击单元格并转到“数据验证”时,我可以看到用户输入正确。然后,当我单击“确定”关闭菜单时,下拉列表会自动更正,并且用户列表格式正确
我的代码有问题吗?还是这是一只虫子
欣赏您的见解。的预期输入格式是字符串数组。正如您所提到的,
ss.getEditors().toString()
创建一个由逗号分隔的电子邮件组成的字符串。然后将此单个字符串对象包装到一个数组中,并将其传递给数据验证生成器。实际上,这类似于:
.requireValueInList(["email@example.com,email2@example.org"])
这与
.requireValueInList(["email@example.com", "email2@example.org"])
解决方案是不要对由返回的User
对象数组调用.toString()
。相反,通过对每个用户调用其方法getEmail()
,将字符串转换为String[]
,然后将该字符串数组传递给数据验证生成器:
var emails = ss.getEditors().map(function (user) { return user.getEmail(); });
/*...*/
.requireValueInList(emails, true)
/*...*/
应该足够了
当您手动打开数据验证UI时,它会将输入的单个字符串拆分为多个不同的字符串,这就是为什么当您单击“确定”时,下拉列表会按您最初的预期填充