【发布时间】:2019-06-10 23:32:05
【问题描述】:
我决定将这个onEdit(e) 触发器函数分解为多个函数,但是当我这样做时,事件对象(e) 部分“丢失了”。搞砸了一段时间后,我终于让它再次工作,但我认为这不是最有效的解决方案。
有什么建议吗,或者这是否足够好?基本上,我只是添加了var e = e; 并让它再次工作。
function onEdit(e){
Logger.log(e);
if(e.range.getSheet().getName() == 'Estimate'){
var e = e;
Logger.log("Starting subCatDV...");
subCatDV(e);
Logger.log("Finished subCatDV!");
Logger.log("Starting itemDV...");
itemDV(e);
Logger.log("Finished itemDV!");
Logger.log("Starting subItemDV...");
subItemDV(e);
Logger.log("Finished subItemDV!");
}
if(e.range.getSheet().getName() == 'Items'){
subCatDV();
}
return;
}
这是似乎没有收到event objects的函数
function subItemDV(e){
// Populate sub-item data validations
var estss = SpreadsheetApp.getActive().getSheetByName('Estimate');
var itemss = SpreadsheetApp.getActive().getSheetByName('Items');
var subItemDVss = SpreadsheetApp.getActive().getSheetByName('subItemDataValidations');
var activeCell = estss.getActiveCell();
Logger.log("I'm in subItemDV...");
Logger.log(e);
Logger.log(activeCell);
Logger.log("Checking sheet name...");
if(activeCell.getColumn() == 3 && activeCell.getRow() > 1){
if(e.range.getSheet().getName() == 'Items') return;
Logger.log("Not in 'Items' sheet! Moving on...");
activeCell.offset(0, 1).clearContent().clearDataValidations();
var subItem = subItemDVss.getRange(activeCell.getRow(),activeCell.getColumn(),itemss.getLastColumn()).getValues();
var subItemIndex = subItem[0].indexOf(activeCell.getValue()) + 2;
Logger.log("Checking subItemIndex...");
if(subItemIndex != 0){
var subItemValidationRange = subItemDVss.getRange(activeCell.getRow(),4,1,subItemDVss.getLastColumn());
var subItemValidationRule = SpreadsheetApp.newDataValidation().requireValueInRange(subItemValidationRange).build();
activeCell.offset(0, 1).setDataValidation(subItemValidationRule);
Logger.log("Finished checking subItemIndex...");
}
}
}
【问题讨论】:
-
请澄清在什么通话期间以及在什么情况下
event object会丢失?它被构造为only in response 以触发(在您的情况下为“onEdit”),并且如果您不重新分配或修改它,它将在整个回调链中持续存在。顺便说一句,由于您的两个if语句检查的是同一件事,因此您应该改用一个if..else语句 -
你好@OlegValter!谢谢您的答复!我编辑了 OP 以反映受影响的功能。
-
嗨,特雷!感谢您的澄清!你能告诉你遇到了什么问题吗?从您当前的代码来看,没有什么可以导致
event object变为undefined(顺便说一句,这就是您所说的“丢失”吗?) -
是的,我想这就是我的意思。我只是在 GAS 中摸索,试图自学。所以我并不总是使用适当的术语。在我添加
var e = e;并将(e)添加到每个函数之前,它只是没有传递值并停止中间函数。因此,所有的Logger都散布在各处。试图查明它停止的位置
标签: events google-apps-script google-sheets triggers