Я пытаюсь реализовать условные выпадающие списки на листе, который вы видите ниже, с помощью Google Script (хотя, если у вас есть другие идеи, не стесняйтесь поделиться). Я основал большую часть своего кода на этом уроке . Идея состоит в том, чтобы обновить возможные значения списка в третьем столбце («Indicador»), основываясь на значении, выбранном во втором столбце каждой соответствующей строки.
Таблица соответствия, используемая для определения того, какой список значений следует использовать, приведена на рисунке 2 (другая рабочая таблица). Обратите внимание, что значения, которые искали для , находятся в первом столбце и, возможно, возвращают списки в последнем столбце таблицы, показанной на рисунке 2 (по сути, это VLOOKUP).
Рисунок 1 - Лист с добавленным раскрывающимся списком
Пока код выглядит так:
function getSpecVars() {
var ws_inds = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Indicadores");
var ws_support = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Apoio");
var range_valores = ws_support.getRange("A5:A9").getValues();
var range_listas = ws_support.getRange("G5:G9").getValues();
Logger.log(range_listas);
}
// Updates the value on a cell in the third column corresponding to the updated value in the same row in another column.
function onEdit(e) {
var active_cell = e.range;
var val = active_cell.getValue();
var row_alter = active_cell.getRow();
var col_alter = active_cell.getColumn();
var row_list = range_listas.indexOf(val);
var list = range_listas[row_list];
var alt_cell = ws_ind.getRange(row_alter,3)
if(col_alter === 2){
applyValidation(list,alt_cell);
}
}
function applyValidation(list, cell) {
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
cell.setDataValidation(rule);
}
Обратите внимание:
- Первая функция сохраняет списки из таблицы поддержки (см. Рис. 2 ниже) в массивах для последующего использования;
- Вторая функция фактически реализует проверку данных, опираясь на переменные, хранящиеся в первой и третьей функциях.
- Третья функция является обобщенной c функция для настройки списка проверки данных в любой заданной ячейке.
Рисунок 2 - Вспомогательный лист со списками, которые необходимо добавить в раскрывающиеся меню
То, что я ожидал увидеть:
Я ожидал, что клетки на третий столбец первого листа (рисунок 1, выше), чтобы разрешить ввод только из раскрывающегося списка, отфильтрованного / выбранного в соответствии с названием категории во втором столбце. Другими словами, я ожидаю, что скрипт OnEdit реализует список проверки данных в третьем столбце всякий раз, когда я изменяю значение во втором столбце.
Что я получаю:
Ничего, на самом деле. Это ничего не делает. Есть идеи?