Динамическое раскрывающееся меню для автоматического заполнения следующего столбца - PullRequest
0 голосов
/ 26 февраля 2019

Компания, в которой я работаю, имеет большой объем данных, хранящихся в Google Sheets, и многие разные люди имеют доступ к ним и имеют доступ к редактированию.Чтобы все было согласованно, я настраиваю некоторые формулы / сценарии по всему листу.

В настоящий момент я застреваю на скрипте, который будет запускать формулу 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");
      }
  }

Что я могу изменить, чтобы он показывал только значение во второй строке, а не диапазон проверки данных, который он показывает в данный момент?

1 Ответ

0 голосов
/ 26 февраля 2019

Я понял это после того, как слишком много часов потратил на это работу.Любые предложения по упорядочению этого, конечно, приветствуются, так как я знаю, что этот код только функциональный и не очень красивый!

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);
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...