示例:
当您安装编辑时触发器时,您的函数会传递开始和结束行和列。但是没有编辑哪张纸。
当然,我的第一个想法是抓住SpreadsheetApp()。getActiveSheet()但这不起作用。
编辑示例电子表格中的任何单元格。安装的编辑后触发器将填充Sheet1的值,告诉您编辑的内容。现在切换到表2或表3并编辑内容。它总是报告Sheet1已被编辑。
触发器的代码:
function my_on_edit(e) {
//the object passed in, e, doesn't know what sheet was edited. Really!
var ss = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetname = ss.getName();
var thesheet = ss.getActiveSheet();
var sheetname = thesheet.getName();
//Tell us what was edited, please.
ss.getSheetByName("Sheet1").getRange("A2:E2").setValues([[ spreadsheetname, sheetname, e.range.rowStart, e.range.columnStart, Utilities.jsonStringify(e)]]);
}
如何编辑工作表?这是我的错误还是这个错误?或者他们如何处理事件处理有缺陷?
答案 0 :(得分:1)
我在许多论坛上发现了这种解决方法,但当我尝试使用它时,我不断获得e.gridId = undefined
。在敲打我的头发并拉出我的头发后,我最终尝试了一些替代品并找到了解决方案。所以我想我会分享我的小发现:
e.range.getGridId()
现在返回相同的值。因此,在上面的脚本中,将第二行更改为:
var s = findSheetById_(e.range.getGridId());
如果你遇到了我所做的同样的未定义问题,那么就可以了。
答案 1 :(得分:0)
我将此问题转发给谷歌应用脚本帮助论坛:
http://www.google.com/support/forum/p/apps-script/thread?tid=535e1d8ff33a731f&hl=en
Henrique Abreu回答说得对;这与Google Apps脚本如何安装onedit触发器有关。但他也给出了一个无证的解决方法:
我用两个未记录的东西来找出哪个工作表被编辑过。 首先,通过检查传递给可安装编辑函数的参数,我找到了一个“gridId”参数,它是工作表的ID(我们在网址上看到的数字相同...#gid =)。 还有sheet.getSheetId(),它出现在代码编辑器中但不在文档中。 这是一个例子:
function my_on_edit(e) {
var s = findSheetById_(e.gridId);
var r = e.range;
s.getRange(r.rowStart, r.columnEnd+1).setValue( s.getName() );
}
function findSheetById_(id) {
var sheets = SpreadsheetApp.getActive().getSheets();
for( var i in sheets )
if( sheets[i].getSheetId() == id )
return sheets[i];
throw 'Unable to find sheet with id: '+id;
}
答案 2 :(得分:0)
代码不起作用,因为e.range和e.value对象不会在可安装的触发器上给出任何对象(未定义)!这已经引起了谷歌的注意,但在Google-script-issues的消息之后没有采取任何行动!