我创建了2个运行onEdit的函数(经过测试,并在命名为onEdit时可以正常工作)
第一个在C列的onEdit中设置D列中> 7的行的值(新日期)。
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());
}
}
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)");
}
}
我创建了2个可安装的触发器来在onEdit上运行这些功能,第一个可以正常运行,但是第二个不会触发第一个。第一个功能输入的值不会触发第二个功能。
我读过的所有内容都表明这是使多个onEdits在单个工作表中运行的方法,但是我被困在这里。
答案 0 :(得分:1)
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());
}
}
答案 1 :(得分:1)
restrictions触发器之一是“脚本执行和API请求不会导致触发器运行”,这意味着您需要在插入完成时间之后手动包括Duration()
调用。 / p>
下面的示例不是完成此操作的唯一方法,但它应该使您了解我要描述的内容。
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)");
}
还要注意,我使用的是编辑触发器附带的event object。使用事件对象可以帮助简化代码并减少不必要的调用。