在多个选项卡中运行脚本

时间:2020-10-21 14:47:48

标签: google-apps-script google-sheets triggers

我想在Google工作表的所有标签页中运行以下脚本(不仅仅是2021年1月),有什么主意吗?

function onEdit(e) {

  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();
  //1.Change 'Sheet1' to be matching your sheet name
  if (r.getColumn() < 9 && ss.getName()=='Jan 2021') { // 2. If Edit is done in any column before 
Column (I)  And sheet name is Sheet1 then:
var celladdress ='A'+ r.getRowIndex() 
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("dd/MM/yyyy");
  }
};

1 个答案:

答案 0 :(得分:1)

解决方案1-预先定义的工作表名称列表:

一种解决方案是预定义您要应用onEdit函数的工作表的工作表名称,并使用includes()检查活动工作表是否为以下工作表之一他们:

function onEdit(e) {

  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();
  var sheetNames = ['Sheet1','Jan 2021','Feb 2021']; 

  if (r.getColumn() < 9 && sheetNames.includes(ss.getName()) ) { 
var celladdress ='A'+ r.getRowIndex() 
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("dd/MM/yyyy");
  }
};

请根据您自己的姓名列表调整['Sheet1','Jan 2021','Feb 2021']


解决方案2-所有工作表:

如果要对所有工作表执行onEdit函数,则只需从if条件中删除工作表名称:

function onEdit(e) {

  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();

  if (r.getColumn() < 9 ) { 
var celladdress ='A'+ r.getRowIndex() 
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("dd/MM/yyyy");
  }
};

解决方案3-运行除以下部分以外的所有工作表:

它基于第一种解决方案的逻辑。您使用!includes排除您不希望成为onEdit函数一部分的预先定义的工作表列表:

function onEdit(e) {

  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();
  var sheetNamesExclude = ['Sheet2','Jun 2021','Aug 2021']; 

  if (r.getColumn() < 9 && !sheetNamesExclude.includes(ss.getName()) ) { 
var celladdress ='A'+ r.getRowIndex() 
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("dd/MM/yyyy");
  }
};