Объедините две функции onEdit () в скрипте приложения Google - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть два простых сценария, два из которых создают динамические c зависимые раскрывающиеся списки, основанные на двух разных источниках данных в листе Google. В моем листе значение в столбце B зависит от A, а значение в столбце I зависит от H. Если я запускаю один скрипт, второй не работает. Я знаю, что должен объединить их в одну функцию, но я совершенно новичок в JavaScript, поэтому я и спрашиваю вас.

function onEdit(){
  var tabLists = "source1";
  var tabValidation = "main";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
  
  var activeCell = ss.getActiveCell();
  
  if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){
    
    activeCell.offset(0, 1).clearContent().clearDataValidations();
    
    var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
    
    var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
    
    if(makeIndex != 0){
    
        var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);
  
     }  
      
  }
 
}

function onEdit(){
  var tabLists = "source2";
  var tabValidation = "MAINTENANCE";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
  
  var activeCell = ss.getActiveCell();
  
  if(activeCell.getColumn() == 8 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){
    
    activeCell.offset(0, 1).clearContent().clearDataValidations();
    
    var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
    
    var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
    
    if(makeIndex != 0){
    
        var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);
  
     }  
      
  }
  
}
 

Я попытался объединить их в один оператор If с большим количеством переменных, таких как "tablist1", "tablists2", "datass1", "datass2" et c. Я так истощен, что буду благодарен, если вы мне поможете.

С уважением

1 Ответ

1 голос
/ 08 февраля 2020

Попробуйте:

function onEdit(e){
  var sh=e.range.getSheet();
  if(e.range.columnStart==1 && e.range.rowStart>1 && sh.getName()=='main'){
    var srcsh=e.source.getSheetByName('source1');
    e.range.offset(0,1).clearContent().clearDataValidations();
    var makes=srcsh.getRange(1, 1, 1, srcsh.getLastColumn()).getValues();
    var makeIndex=makes[0].indexOf(e.value)+1;
    if(makeIndex!=0){
      var validationRange=srcsh.getRange(3, makeIndex,srcsh.getLastRow());
      var validationRule=SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
      e.range.offset(0,1).setDataValidation(validationRule);
    }  
  }
  if(e.range.columnStart==8 && e.range.rowstart>1 && sh.getName()=='MAINTENANCE'){
    var srcsh=e.source.getSheetByName('source2');
    e.range.offset(0,1).clearContent().clearDataValidations();
    var makes=srcsh.getRange(1,1,1,srcsh.getLastColumn()).getValues();
    var makeIndex=makes[0].indexOf(e.value()) + 1;
    if(makeIndex!=0){
      var validationRange=srcsh.getRange(3,makeIndex,srcsh.getLastRow());
      var validationRule=SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
      e.range.offset(0, 1).setDataValidation(validationRule);
    }  
  }
}

Я не уверен, что здесь будет работать простой триггер, потому что вы меняете данные пользователя. Таким образом, вам может потребоваться устанавливаемый триггер, и в этом случае вы больше не захотите называть его onEdit, потому что они сработают дважды. Один раз с помощью простого триггера и один раз с помощью устанавливаемого триггера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...