首页 > 解决方案 > 如何将名称“onEdit”更改为其他名称?

问题描述

谁能帮我做到这一点?我的问题是我所有的三 (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);
       }
   }
}

标签: google-apps-scriptgoogle-sheetstriggers

解决方案


两个函数合二为一 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');
  }
}

重新组织组织会很好,这样您就可以更快地返回不涉及任何功能的工作表。在调试这些函数时查看执行页面真的很有帮助。


推荐阅读