Google Sheets - Запрос зависимого выпадающего скрипта - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь создать зависимый выпадающий список на моем листе, который в столбце A позволит вам выбрать список регионов (например, в Северной и Южной Америке, Африке, Азии) и т. Д. c, а затем в столбце B отобразится список страны региона, выбранные в столбце А.

Я пытался использовать формулу = косвенный и = индекс / совпадение, но они не работают для всего моего листа, который превышает 1000 строк.

В моей книге 11 вкладок, однако я хочу только проверить данные из вкладки "страны" на вкладке "Таблица основных вызовов". Все остальные вкладки - это = фильтрация с основного листа.

На вкладке стран я перечислил регионы в столбце A из строки 2 с соответствующими странами в столбце B, поэтому он выглядит следующим образом:

Африка. Гана Азия. Япония

и т. Д.

На моей вкладке «Основные вызовы» вверху находятся слайсеры et c, поэтому ввод данных начинается только со строки 9.

Я попытался сценарий ниже, но безрезультатно:

var mainWsName = "Master Calls Sheet";
var optionsWsName = "countries";
var firstLevelColumn = 1;
var secondLevelColumn = 2;

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mainWsName");
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("optionsWsName");
var options = wsOptions.getRange(2, 1,wsOptions.getLastRow()-1,2).getValues();

function myFunction() {

  function onEdit(e){
    var activeCell = e.range;
    var val = activeCell.getValue();
    var r = activeCell.getRow();
    var c = activeCell.getColumn();
    var wsName = activeCell.getSheet().getName();
    if(wsName == "mainWsName" && c === firstLevelColumn && r > 8){
       var filteredOptions = options.filter(function(o){ return o[0] === val });
       var listToApply = filteredOptions.map(function(o){ return o[1] });
    var cell = ws.getRange(r, 2);
    applyValidationToCell(listToApply,cell)
  }

  }}

function applyValidationToCell(list,cell){

  var rule = SpreadsheetApp
  .newDataValidation()
  .requireValueInList(list)
  .setAllowInvalid(false)
  .build;

  cell.setDataValidation(rule)

}

Может кто-нибудь помочь?!?

1 Ответ

1 голос
/ 17 января 2020

То, что вы хотите, может быть достигнуто с помощью следующего скрипта, который состоит из двух функций: createDropdown() и onEditTrigger(e).

  • Глобальные переменные:
var ss = SpreadsheetApp.getActiveSpreadsheet()
var master = ss.getSheetByName("Master Calls Sheet");
var countries = ss.getSheetByName("countries");
var options = countries.getRange(2, 1,countries.getLastRow()-1,2).getValues();
var continentsList = ['Americas','Africa','Asia']; 

Если вы хотите добавить в функцию другие континенты, вам следует изменить только переменную var continentsList.

  • createDropdown() функция:
function createDropdown() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(continentsList,true).build();
  ss.getRange('A9').setDataValidation(rangeRule);
}

Вышеупомянутая функция используется для создания выпадающего списка со всеми континентами, и она будет создана на A9 cell на Master Calls Sheet.

  • Функция onEditTrigger(e) :
function onEditTrigger(e) {
  var countries = e.range.getSheet();
  var cellValue = e.range.getValue();

  var k =0;

  for (k=0; k<continentsList.length;k++) {

    if (cellValue == continentsList[k]) {
      countries.getRange("B9:B").clear();
      var j=0;
      for (var i=0; i<options.length; i++) 
        if (options[i][0]== continentsList[k]) {
          j++;
          countries.getRange(j+8,2).setValue(options[i][1]);
      }
    }
  }
}

Вышеприведенная функция представляет собой устанавливаемый триггер, который означает, что каждый время изменения значения из 1040 * будет срабатывать. Он работает, просматривая continentsList, и проверяет, соответствует ли значение из каждой итерации тому, которое выбрано из выпадающего списка. Если значения соответствуют, то перечислены страны каждого континента.

Значения появятся в B column, начиная с B9, в Master Calls Sheet.

Триггер должен быть установить со следующими свойствами:

enter image description here

Более того, я предлагаю вам проверить следующие ссылки, поскольку они могут помочь в вашем будущем развитии:

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