Как я могу изменить имя "onEdit" на другое имя? - PullRequest
0 голосов
/ 11 января 2019

Может кто-нибудь помочь мне сделать это? Моя проблема в том, что все мои три (3) кода имеют одинаковое имя "onEdit". Как я могу запустить три (3) из них?

Есть предположение, что мне нужно изменить их имя, но когда я изменяю имена, мои коды не запускаются.

Может кто-нибудь выложить пример кода для меня, для моей справки? Пожалуйста?

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  for (p=1 ; p<=lastRow ; p++) { // p <= lastRow
       var status = sheet.getRange("C"+p).getValue(); // Change P  to the completed column
       if (status == "no") {                                           // status == "no"
         sheet.hideRows(p);
       }
   }
}
function onEdit() {
   var spreadsheet = SpreadsheetApp.getActive();
   var sheet = spreadsheet.getActiveSheet();
   var cell = spreadsheet.getActiveCell();
   var col = cell.getColumn();
   var row = cell.getRow();
   var rows = [1, 2, 3];
   // This is a list of the rows that should blink if edited.
   if (col === 7 && rows.indexOf(row) !== -7 && sheet.getName() === 'Sheet1') {
   // If the edited cell is in column A (1) and if the edited cell
   // is one of the rows listed
      for (var num = 0; num < 50; num++) {
           var colour = num%2 === 0
               ? 'GOLD'
               : 'WHITE';
           // Using ? and : like this is called a ternary operation. It's a
           // shorter form of if. ifStatement ? true : false.
           sheet.getRange('G' + row + ':G' + row).setBackground(colour);
           // Get the range for the edited row and set the bg colour
           SpreadsheetApp.flush();
           Utilities.sleep(500);
       }
   }
}

1 Ответ

0 голосов
/ 11 января 2019

Две функции в одном onEdit ()

Вот пример, который объединяет две функции в один простой триггер onEdit ().

function onEdit(e){
  var ss=e.source;
  var rg=e.range;
  var sh=rg.getSheet();
  var name=sh.getName();
  Logger.log('Name: %s',name);
  var includedSheets=['Sheet45','Sheet46']
  if(includedSheets.indexOf(name)==-1){
    return;
  }
  if(name=='Sheet45'){
    Sheet45(e);//You could put the code right here but I wanted to make it clear that it's two different operation.  This one deletes a row if all conditions are met.
  }
  if(name=='Sheet46'){
    Sheet46(e);//This one deletes a column if all conditions are met
  }
}

function Sheet45(e){//You can name them whatever you want
  var sh=e.range.getSheet();
  var row=e.range.getRow();
  var col=e.range.getColumn();
  Logger.log('Name: %s',e.range.getSheet().getName());
  if(col==1 && row==4 && e.value=='delete'){//if column1 and row4 is changed to 'delete'
    sh.deleteRow(row);//the it deletes row 4
  }
}

function Sheet46(e){
  var sh=e.range.getSheet();
  var row=e.range.getRow();
  var col=e.range.getColumn();
  Logger.log('Name: %s',e.range.getSheet().getName());
  if(row==1 && col==4 && e.value=='delete'){//if column4 and row1 is changed to 'delete'
    var rg=sh.getDataRange();//then it deletes column 4
    var vA=rg.getValues();
    for(var i=0;i<vA.length;i++){
      vA[i].splice(3,1);
      Logger.log('vA[%s]: %s',i,vA[i]);
    }
  }
  rg.clear();
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}

Есть много разных способов сделать это. Мне нравится возвращаться как можно быстрее на листы, которые не задействованы ни в одной из функций.

Вы, вероятно, уже знаете, что не можете напрямую запускать эти функции onEdit (), если не предоставите объект события.

Ваши две функции объединены

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

function onEdit(e){
  oE1(e);
  oE2(e);
}

function oE1(e) {//this works on all sheet
  var ss=e.source;
  var rg=e.range;
  var sh=rg.getSheet();
  var name=sh.getName();
  var lastRow = sh.getLastRow();
  for(var row=1;row<=lastRow;row++) {
    var status=sh.getRange(row,3).getValue();//Column3 is C
       if (typeof(status)=="string" && status.toLowerCase()=="no") {                                   
         sh.hideRows(row);
       }
   }
}

function oE2(e) {//this only works on sheet 1
  var ss=e.source;
  var rg=e.range
  var sh=rg.getSheet();
  var row=rg.getRow();
  var col=rg.getColumn();
  var cell=sh.getRange(row,col);
  var rows = [1, 2, 3];
  if(col==1 && rows.indexOf(row)!=-1 && sh.getName()=='Sheet1') {
    sh.getRange(row,7).setBackground((rows.indexOf(row)%2==0)?'Gold':'White');
  }
}

Было бы неплохо переработать организацию, чтобы вы могли быстрее вернуться к листам, которые не связаны ни с одной из функций. При отладке этих функций очень полезно смотреть на страницу выполнения.

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