google-apps-script - 如何将名称“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);
}
}
}
解决方案
两个函数合二为一 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');
}
}
重新组织组织会很好,这样您就可以更快地返回不涉及任何功能的工作表。在调试这些函数时查看执行页面真的很有帮助。
推荐阅读
- javascript - 如何在 Tone.js 中调整音频缓冲区?
- azure - 雪花连接器 .Net 连接测试失败 用户名和密码不正确
- python - python缩进命名空间
- javascript - 如何防止 Canvas 的笔画像素在放大时保持清晰?
- pyserial - Pyserial + 不带终止字符的定长消息协议
- php - 令牌如何防止服务器端的多个表单提交?
- wordpress - 为什么一个函数在 mamp 而不是在主机服务器上工作?
- python - 使用递归将列表中的列表转换为仅包含整数的列表
- java - 如何将两个文件的特定列复制到Java中的一个文件中?
- machine-learning - 即使在对数据集进行过采样之后,性能也非常低