-
我创建了两个运行onEdit的函数(在命名为onEdit时测试并工作(
-
第一个设置行的值(新日期(>D列中的7关于C列的编辑
function CompleteTime() { //Function to add a time stamp to Complete Time Column D
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveCell();
var row = range.getRow();
var col = range.getColumn()
if(row>7 && col==3){
sheet.getRange(row, 4).setValue(new Date());
}
}
- 第二个在第8行第E列中设置公式
function Duration() { //Function to set formula in column E to calculate duration from start time to first complte time
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveCell();
var row = range.getRow();
var col = range.getColumn()
if(row==8 && col==4){
sheet.getRange(row, 5).setFormula("=SUM(D8-B3)");
}
}
我创建了两个可安装的触发器来在Edit上运行这些函数,第一个运行良好,但第二个没有触发第一个。第一个函数输入的值不会触发第二个函数。
我所读到的一切都表明,这是在一张纸上运行多个onEdits的方法,但我被困在这里了。
触发器的限制之一是"脚本执行和API请求不导致触发器运行";,这意味着您需要在插入完成时间后手动包含Duration()
调用。
下面的例子并不是实现这一点的唯一方法,但它应该让你了解我要描述的内容。
function onEdit(e) {
var row = e.range.rowStart;
var col = e.range.columnStart;
if (row == 8 && col == 4) {
insertDurationFormula(e.range.offset(0, 1));
} else if (row > 7 && col == 3) {
insertCurrentTime(e.range.offset(0, 1));
insertDurationFormula(e.range.offset(0, 2));
}
}
function insertCurrentTime(cell) {
cell.setValue(new Date());
}
function insertDurationFormula(cell) {
cell.setFormula("=SUM(D8-B3)");
}
还要注意,我使用的是编辑触发器中包含的事件对象。使用事件对象可以帮助简化代码并减少不必要的调用。
在一个电子表格中包含多个onEdit
触发器不是一种好的做法
如果是简单的onEdit
触发器,每个Apps Script项目不可能有一个以上的触发器,如果是可安装的触发器,这可能会导致冲突。
相反,在触发器上只绑定一个函数,并根据条件从那里调用其他函数。
样品:
function bindmeOnTrigger() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveCell();
var row = range.getRow();
var col = range.getColumn()
if(row==8 && col==4){
function1();
} else if(row>7 && col==3){
function2();
}
}
function function1(){
...
}
function function2(){
...
}
或者简单地说:
function bindmeOnTrigger() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveCell();
var row = range.getRow();
var col = range.getColumn()
if(row==8 && col==4){
sheet.getRange(row, 5).setFormula("=SUM(D8-B3)");
} else if(row>7 && col==3){
sheet.getRange(row, 4).setValue(new Date());
}
}