动态下拉菜单设置为自动填充下一列

问题描述 投票:0回答:1

我工作的公司有大量数据存储在Google表格中,许多不同的人都可以访问它并拥有编辑权限。为了保持一致性,我在整个工作表中设置了一些公式/脚本。

我目前所困扰的基本上是一个脚本,它将运行IF公式并显示一个设定值,如果它之前的单元格等于特定值。因此,列K的数据验证下拉列表取决于A1:I1中的范围,如果我选择一个值,它只需显示该范围内直接低于单元格的任何数据。我知道这可以通过一个简单的VLOOKUP来完成,但如果我不需要,我宁愿不这样做。我当前的脚本是这样的:

function onEdit(){
  var tabPhase = "Authenticated";

  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var dataYear = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabPhase);

  var activeCell = spreadSheet.getActiveCell();

  if(activeCell.getColumn() == 11 && activeCell.getRow() > 1 && spreadSheet.getSheetName() == tabPhase){
    activeCell.offset(0, 1).clearContent().clearDataValidations();
    var makes = dataYear.getRange(1, 1, 1, dataYear.getLastColumn()).getValues();
    var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;

    if(makeIndex != 0){
        var validationRange = dataYear.getRange(3, makeIndex, dataYear.getLastRow());
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);

     }   
  }   
  }

它几乎完美地工作,我遇到的唯一问题是L列中的单元格然后输出数据验证。

我还能够使用嵌套的if语句来解决这个问题,但是我不确定如何从单元格中拉出而不是让它显示以前设置的数据。这是代码:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var aSheet = ss.getActiveSheet();
  var aCell = aSheet.getActiveCell();
  var aColumn = aCell.getColumn();
  var aRow = aCell.getRow();

  var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);
  var aValue = aCell.getValue()
  if (aColumn == 1 && aSheet.getName() == 'Authenticated Ranges') {
      var matchCell = aSheet.getRange(aRow, aColumn).getValue()
if(matchCell == "A1")
  licenseTypeCell.setValue("A2");
    if(matchCell == "B1")
  licenseTypeCell.setValue("B2");
    if(matchCell == "C1")
  licenseTypeCell.setValue("C2");
    if(matchCell == "D1")
  licenseTypeCell.setValue("D2");
      }
  }

我可以更改什么才能使其显示第二行中的值而不是当前显示的数据验证范围?

google-apps-script google-sheets google-sheets-formula
1个回答
0
投票

我花了太多时间在它上面工作后最终搞清楚了。任何简化这一点的建议当然都是受欢迎的,因为我知道这段代码只是功能性而且不是很漂亮!

function onEdit() {
  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
  var aSheet = app.getActiveSheet();
  var aCell = aSheet.getActiveCell();
  var aColumn = aCell.getColumn();
  var aRow = aCell.getRow();
  var targetSheet = app.getActiveSpreadsheet().getSheetByName("Authenticated");

  var A1 = targetSheet.getRange(2,1).getValue();
  var B1 = targetSheet.getRange(2,2).getValue();
  var C1 = targetSheet.getRange(2,3).getValue();
  var D1 = targetSheet.getRange(2,4).getValue();
  var E1 = targetSheet.getRange(2,5).getValue();

  var licenseTypeCell = aSheet.getRange(aRow, aColumn+1);

  var aValue = aCell.getValue()

  if (aColumn == 16 && aSheet.getName() == 'Master') {
      var matchCell = aSheet.getRange(aRow, aColumn).getValue()
    if(matchCell == "A1")
      licenseTypeCell.setValue(A1);
    if(matchCell == "B1")
      licenseTypeCell.setValue(B1);
    if(matchCell == "C1")
      licenseTypeCell.setValue(C1);
    if(matchCell == "D1")
      licenseTypeCell.setValue(D1);
    if(matchCell == "E1")
      licenseTypeCell.setValue(E1);
      }
  }
© www.soinside.com 2019 - 2024. All rights reserved.