gpt4 book ai didi

javascript - 单个 onEdit 函数有效 - 多个相同的函数不起作用

转载 作者:行者123 更新时间:2023-11-30 20:41:33 24 4
gpt4 key购买 nike

我使用的是 Google 表格,我有两个功能 onEditonCommsEdit,它们运行良好,并在各自的表格中添加了时间戳。如果我准确地复制并粘贴其中一个并提供一个新的函数名称 - 附加功能似乎将不起作用。

我订购的东西不正确吗?或者我应该在同一个函数中命名所有工作表吗? (我创建了重复项,因为对列的写入因工作表而异。)

function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{name:"Last Row", functionName:"goto_last"}];
sheet.addMenu("Shortcuts", entries);
myFunction();
};

function goto_last() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mysheet = ss.getActiveSheet();

var lastrow = mysheet.getLastRow();

mysheet.setActiveCell(mysheet.getDataRange().offset(lastrow-1, 0, 1, 1));
};

function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Primary Log" ) {
var r = s.getActiveCell();
var user = Session.getActiveUser().getEmail();
if( r.getColumn() != 13 ) { //checks the column
var row = r.getRow();
var time = new Date();
time = Utilities.formatDate(time, "GMT-08:00", "yyyy-MM-dd, hh:mm:ss");
SpreadsheetApp.getActiveSheet().getRange('M' + row.toString()).setValue(time);
SpreadsheetApp.getActiveSheet().getRange("N" + row.toString()).setValue(user);
}
};
};

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mysheet = ss.getActiveSheet();

var lastrow = mysheet.getLastRow();

mysheet.setActiveCell(mysheet.getDataRange().offset(lastrow-1, 0, 1, 1));
};

function onCommsEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Received Report" ) {
var r = s.getActiveCell();
var user = Session.getActiveUser().getEmail();
if( r.getColumn() != 11 ) { //checks the column
var row = r.getRow();
var time = new Date();
time = Utilities.formatDate(time, "GMT-08:00", "yyyy-MM-dd, hh:mm:ss");
SpreadsheetApp.getActiveSheet().getRange('K' + row.toString()).setValue(time);
SpreadsheetApp.getActiveSheet().getRange("L" + row.toString()).setValue(user);
}
};
};

最佳答案

您必须创建 a trigger以便自动调用函数。

不建议使用 onEdit 条件调用多个函数,因为执行顺序未明确定义。我也不建议命名一个需要 installed trigger 的函数,使其与相应的 simple trigger 匹配——换句话说,一个需要授权范围的函数,并且是在电子表格值被修改后运行不应称为 onEdit(e),因为这是激活简单触发器的函数的名称。如果您的函数不需要授权范围,那么您可以使用简单触发器。

就你的程序设计而言,你应该使用流控制。而不是多个函数,简单的分支就足够了:

function calledOnEdit(e) {
if(!e) { throw new Error("This function requires an event object"); }

// Use the event object rather than lookups that assume the active cell was the edited cell:
var s = e.range.getSheet();
var row = e.range.getRow();
var col = e.range.getColumn();
if( s.getName() == "Primary Log" && col != 13 ) { //checks the column
logTimestamp(s, "M" + row + ":N" + row);
} else if( s.getName() == "Received Report" && col != 11 ) { //checks the column
logTimestamp(s, "K" + row + ":L" + row);
}
}
function logTimestamp(sheet, a1ref) {
var user = Session.getActiveUser().getEmail();
var time = Utilities.formatDate(new Date(), "GMT-08:00", "yyyy-MM-dd, hh:mm:ss");
sheet.getRange(a1ref).setValues([[time, user]]);
}

关于javascript - 单个 onEdit 函数有效 - 多个相同的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49199857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com