背景: 我正在尝试开发Google表格,用户可以在其中输入一些过程参数,然后启动一个宏,该宏:
1)将数据复制到Google表格文件中其他标签/表格上的主数据表中。
2)将数据以某种格式复制到其他标签/工作表中,以提供一些图表以趋势化最近的数据。
3)清除数据输入单元格。
注意:除了需要用户输入数据的单元格之外,文件中的所有标签/工作表都只有我(所有者)可以编辑。
到目前为止我所拥有的: 该宏对我(所有者)来说是完美的,但是其他用户却遇到了错误,指出了保护问题。我将onEdit函数用作宏,它将通过在目标单元格中输入“ GO”来触发。这将调用自定义函数Transfer_Data()。 我阅读了有关已安装触发器的更多信息,发现已安装触发器将在我的许可下运行,并决定尝试该操作。但是,已安装的触发器被设置为运行onEdit,而后者又运行工作表中内置的onEdit函数。这意味着onEdit功能被激活两次,一次是我(所有者),一次是用户进行编辑。用户在电子表格上启动的onEdit函数将引发错误,但由安装的触发器启动的错误应按预期运行代码。如何打破每次电子表格编辑时两个不同用户两次连续调用onEdit函数两次的恶性循环?
function onEdit(e){
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('E16').setValue('BEBUG0');
var editedRange = e.range;
var editedRow = editedRange.getRow();
var editedColumn = editedRange.getColumn();
var editedCell = e.range.getA1Notation();
var editedValue = e.range.getValue();
if (editedCell == 'E15'){
spreadsheet.getRange('E16').setValue('BEBUG1');
if(editedValue == 'GO' || editedValue == 'Go' || editedValue == 'go' ||
editedValue == 'gO'){
spreadsheet.getRange('E16').setValue('BEBUG2');
Transfer_Data();
}
}
else{
spreadsheet.getRange('E16').setValue('YELLOW BOX NOT EDITED');
}
}
注意:在上面的代码中设置范围“ E16”是通过调试问题来解决的。我注意到它通过对工作表进行编辑并两次调用单元格E16来遍历调试检查的文本,从而两次调用onEdit函数。
答案 0 :(得分:0)
如何打破每次电子表格编辑时两个不同用户连续两次调用onEdit函数的恶性循环?
onEdit是保留的函数名称,用于简单的触发器,另一方面,可安装的触发器可以运行任何函数。为了避免上述问题,请更改函数名称。换句话说
替换
function onEdit(e){
通过类似
function installableOnEdit(e){
相关