Проблема:
Диапазон, указанный в Data validation
, должен находиться в той же электронной таблице , что и диапазон, к которому применяется Data validation
. Вы заметите это, если попытаетесь добавить его непосредственно через пользовательский интерфейс Sheets (при настройке диапазона вы можете выбирать только листы из текущей электронной таблицы).
Решение:
Как было предложено в комментарии, лучший способ добиться этого поведения:
- Создание массива из значений в исходной электронной таблице.
- Установка
requireValueInList
правила проверки для места назначения диапазон.
Вы можете сделать что-то по следующим строкам:
function dataValDifferentSS() {
var id = PropertiesService.getScriptProperties().getProperty('FILEID');
var range = SpreadsheetApp.openById(id).getSheetByName("source").getRange("A1:A"); // Change sheet name and range accordingly
var list = range.getValues().flat().filter(value => value !== ""); // Get 1D array from source range
var targetSheet = SpreadsheetApp.getActive().getSheetByName("target"); // Change sheet name accordingly
var cell = targetSheet.getRange("A1"); // Change A1 range accordingly
var rule = SpreadsheetApp.newDataValidation().requireValueInList(list, true).build();
cell.setDataValidation(rule);
}
Примечание:
- Вы должны отредактировать имена исходного и целевого листов и диапазоны соответственно (
source
, target
, A1:A
, A1
). - Я предположил, что скрипт привязан к целевой электронной таблице.
- Вы должны включить V8 , чтобы этот скрипт работал.
Ссылка: