可靠的下拉列表和getValues()2D数组

时间:2019-03-21 13:45:08

标签: google-apps-script drop-down-menu google-sheets

我正在Google工作表中构建可靠的(过滤的)下拉列表,其中一个下拉列表中的值取决于另一个列表的选择。尽管是相对简单的安排,但我遇到了getValues()的问题 返回二维数组。

设置如下:

  1. 两张纸,一张活动,另一张 $ SheetData
  2. 活动的E列包含下拉菜单,选择这些下拉菜单后,应在G列中提供适当的选择。
  3. E列的数据来自工作表 $ SheetData (E1:K1);
  4. G列的数据来自工作表 $ SheetData ,分别来自各个列(E1 = SIRE:SIRE1,SIRE2等);
  5. 活动的第E列中选择SIRE时,我需要G列中的数据来自 $ SheetData 的E2:E 这是我的代码:
function dependableDropdown() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activity = ss.getSheetByName("Activity");
  var sheetData = ss.getSheetByName("$SheetData");
  var activeCell = activity.getActiveCell();

  if(activeCell.getColumn() == 5 && 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列中。

感谢您的帮助。
谢谢


对应的屏幕:

活动表
Activity sheet

$ SheetData
Data sheet

1 个答案:

答案 0 :(得分:1)

如果您获得inspectionTypesIndex的书面信息(SIRE = 1,OVID = 2,等等),并且有选项列:E,F,G,...,则应在其中引用validationRange通过以下方式:

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

因为E列为第5位,但“ SIRE”索引等于1。