Создайте раскрывающийся список в ячейке (Проверка данных листа Google) из списка CSV с помощью скрипта Apps - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть электронная таблица с несколькими редакторами. Я получаю список всех пользователей, разделенных запятой, используя:

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()
  );
}

Созданное выпадающее меню показывает список с запятыми. Странно то, что когда я щелкаю правой кнопкой мыши по ячейке и перехожу к «Проверка данных», я вижу, что пользователи вводятся правильно. Когда я нажимаю «ОК», чтобы закрыть меню, выпадающий список исправляется, и список пользователей корректно форматируется.

Что-то не так с моим кодом? Или это ошибка?

Ценю ваши идеи.

1 Ответ

0 голосов
/ 27 апреля 2018

Ожидаемый формат ввода для requireValueInList - это массив String с. Как вы упоминаете, ss.getEditors().toString() создает String писем через запятую. Затем вы помещаете этот одиночный String объект в массив и передаете его в построитель проверки данных. По сути, это сродни:

.requireValueInList(["email@example.com,email2@example.org"])

что явно отличается от

.requireValueInList(["email@example.com", "email2@example.org"])

Решение состоит в том, чтобы не вызывать .toString() для массива User объектов, который возвращается ss.getEditors(). Вместо этого преобразуйте User[] в String[], вызвав его метод getEmail() для каждого пользователя, а затем передайте этот массив из String s в построитель проверки данных:

var emails = ss.getEditors().map(function (user) { return user.getEmail(); });
/*...*/
.requireValueInList(emails, true)
/*...*/

должно быть достаточно.

Когда вы вручную открываете пользовательский интерфейс проверки данных, он разбивает входную одну строку на множество разных строк, поэтому при нажатии кнопки «ОК» раскрывающийся список заполняется так, как вы изначально предполагали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...