Ir para conteúdo
Fórum Script Brasil

SérgioPrestes

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por SérgioPrestes

  1. Bom dia!

    Utilizo o script a seguir para possibilitar a validação tripla de dados em uma planilha do Google. As opções estão interligadas e, após a seleção na primeira coluna são carregadas as opções relacionadas à ela na segunda e terceira sucessivamente. Até agora eu usava esse script em uma única planilha, mas surgiu a necessidade de aplicar em várias dentro do mesmo arquivo. Podem dar uma ajuda?

    var mainWsName = "BASE TESTE";
    var optionWsName = "Motivos";
    var firstLevelColumn = 29;
    var secondLevelColumn = 30;
    var thirdLevelColumn = 31;
     
    var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mainWsName);
    var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionWsName);
    var options = wsOptions.getRange(21,wsOptions.getLastRow()-1,3).getValues();
     
    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 > 1){
         applyFirstLevelValidation(val,r); 
      } else if (wsName === mainWsName && c === secondLevelColumn && r > 1){
         applySecondLevelValidation(val,r);
      }
        
     
    // end of onEdit
     
    function applyFirstLevelValidation(val,r){
     
        if(val === ""){
            ws.getRange(rsecondLevelColumn).clearContent();
            ws.getRange(rsecondLevelColumn).clearDataValidations();
            ws.getRange(rthirdLevelColumn).clearContent();
            ws.getRange(rthirdLevelColumn).clearDataValidations();
                    
        } else {
          ws.getRange(rsecondLevelColumn).clearContent();
          ws.getRange(rsecondLevelColumn).clearDataValidations();
          ws.getRange(rthirdLevelColumn).clearContent();
          ws.getRange(rthirdLevelColumn).clearDataValidations();
          var filteredOptions = options.filter(function(o){ return o[0] === val });
          var listToApply = filteredOptions.map(function(o){ return o[1] });
          var cell = ws.getRange(rsecondLevelColumn);
          applyValidationToCell(listToApply,cell);
        }
     
    }
     
    function applySecondLevelValidation(val,r){
     
        if(val === ""){
            ws.getRange(rthirdLevelColumn).clearContent();
            ws.getRange(rthirdLevelColumn).clearDataValidations();
        } else {
          ws.getRange(rthirdLevelColumn).clearContent();
          var firstLevelColValue = ws.getRange(rfirstLevelColumn).getValue();
          var filteredOptions = options.filter(function(o){ return o[0] === firstLevelColValue && o[1] === val });
          var listToApply = filteredOptions.map(function(o){ return o[2] });
          var cell = ws.getRange(rthirdLevelColumn);
          applyValidationToCell(listToApply,cell);
        }
     
    }
     
    function applyValidationToCell(list,cell){
     
      var rule = SpreadsheetApp
      .newDataValidation()
      .requireValueInList(list)
      .setAllowInvalid(false)
      .build();
        
      cell.setDataValidation(rule);
      
        
    }

     Aguardo e agradeço.

×
×
  • Criar Novo...