Я пытаюсь создать зависимый список, как описано и ответил (со сценарием) здесь.
Я бы хотел добиться этого, если выбрал определенное значение (например, «Первый»)) из ячейки в столбце 1, то раскрывающиеся параметры следующей ячейки в той же строке должны предлагать диапазон значений из столбца на другом листе с тем же заголовком, что и значение в первой левой ячейке (т.е. первый лист называется «Селектор» - в котором есть выпадающие списки, на втором листе «KAT» у меня есть варианты для этих выпадающих списков).Это должно быть возможно для каждой строки в зависимости от значения каждой первой ячейки строки.
Я попытался использовать и адаптировать предложенный скрипт и просмотрел файлы примеров в статье, но мне, видимо, не хватает некоторыхбазовое понимание сценария, чтобы можно было адаптировать и правильно его реализовать.
Может ли кто-нибудь помочь мне с правильной работой этого динамического выпадающего меню?
Просто чтобы прояснить мое последнее намерение: я хотел бычтобы этот скрипт работал первым, чтобы иметь возможность использовать его для нескольких файлов.Моя конечная цель, однако, состоит в том, чтобы создать самозаполняющиеся раскрывающиеся списки и селекторы, чтобы я мог просто заполнить данные на листе «Селектор» и затем иметь возможность выбрать эти же значения позже в ячейках ниже (в зависимости отимя (значение) первой ячейки в строке = первая ячейка столбца, содержащего диапазон проверки).Я надеюсь, что мне удастся добиться этого, используя сводную таблицу или любую другую формулу на листе «KAT», которая объединит мои данные с листа «Селектор» и вернет их обратно в виде раскрывающихся опций ...).
Спасибо за вашу помощь.
См. Лист с примерами здесь
Код, который я использовал (как указано выше):
function onEdit()
{
var ss = SpreadsheetApp.getActiveSpreadsheet(),
sheet = ss.getActiveSheet(),
name = sheet.getName();
if (name != 'Selector') return;
var range = sheet.getActiveRange(),
col = range.getColumn();
if (col != 1) return;
var val = range.getValue(),
dv = ss.getSheetByName('KAT'),
data = dv.getDataRange().getValues(),
catCol = data[0].indexOf(val),
list = [];
Logger.log(catCol)
for (var i = 1, len = 100; i < len; i++) // Problem is here, you have too many items in list! Cannot have more 500 items for validation
list.push(data[i][catCol]);
var listRange = dv.getRange(2,catCol +1,dv.getLastRow() - 1, 1)
Logger.log(list)
var cell = sheet.getRange(range.getRow(), col-1)
var rule = SpreadsheetApp.newDataValidation()
.requireValueInRange(listRange) // Use requireValueIn Range instead to fix the problem
.build();
cell.setDataValidation(rule);
Logger.log(cell.getRow())
}