Надежный выпадающий список и 2D-массив getValues ()

#google-apps-script #drop-down-menu #google-sheets

#google-apps-script #выпадающее меню #google-sheets

Вопрос:

Я создаю надежный (отфильтрованный) выпадающий список в Google Sheet, где значение в одном выпадающем списке зависит от выбора другого. Несмотря на относительную простоту устройства, я столкнулся с проблемой с getValues (), которая возвращает 2D-массив.

Существует следующая настройка:

  1. Два листа, один Activity и другой $ SheetData.
  2. Столбец E действия содержит выпадающие списки, которые при выборе должны обеспечивать соответствующий выбор в столбце G.
  3. Данные для столбца E получены из таблицы $SheetData (E1: K1);
  4. Данные для столбца G получены из таблицы $ SheetData из каждого из соответствующих столбцов (E1 = SIRE: SIRE1, SIRE2 и т.д.);
  5. Когда в столбце E Activity выбран SIRE, мне нужно, чтобы данные в столбце G были из E2: E $ SheetData, вот мой код:
 function dependableDropdown() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activity = ss.getSheetByName("Activity");
  var sheetData = ss.getSheetByName("$SheetData");
  var activeCell = activity.getActiveCell();

  if(activeCell.getColumn() == 5 amp;amp; activeCell.getRow() > 1){
    activeCell.offset(0, 2).clearContent().clearDataValidations();

    var inspectionTypes = sheetData.getRange(1, 5, 1, 7).getValues();    

    var selectedValue = activeCell.getValue();
    var inspectionTypesIndex = inspectionTypes[0].indexOf(selectedValue)   1;

    var validationRange = sheetData.getRange(2, inspectionTypesIndex, sheetData.getLastRow());

    var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
    activeCell.offset(0, 2).setDataValidation(validationRule);
  };
};
  

Значение, возвращаемое inspectionTypesIndex , кажется правильным (SIRE = 1, OVID = 2 и т.д.), Но когда я выбираю данные в столбце E, я получаю неправильные данные, введенные в столбец G.

Благодарю за помощь.
Спасибо,


Соответствующие экраны:

Таблица действий
Таблица действий

$SheetData
Таблица данных

Комментарии:

1. Как вы запускаете вышеупомянутую функцию dependableDropdown() ? Или вы запускаете его вручную в качестве предварительного теста?

2. @АлександрЕрмолин внизу есть onEdit(), где вызывается dependableDropdown().

Ответ №1:

Если вы получаете, inspectionTypesIndex как написано (SIRE = 1, OVID = 2 и т.д.), И у вас есть столбцы параметров: E, F, G, … , тогда вы должны ссылаться validationRange следующим образом:

 var validationRange = sheetData.getRange(2, inspectionTypesIndex   4, sheetData.getLastRow());
  

потому что столбец E является 5-м, но индекс «SIRE» равен 1.

Комментарии:

1. Спасибо! Конечно, как я мог пропустить этот очевидный рост!