我写了一个小函数:
function weeklyCurrency(e) {
var changed_cell = e.range.getA1Notation();
Logger.log(changed_cell);
}
然后将其设置为可安装的onEdit触发器:
Resources > current projects triggers > weeklyCurreency > onEdit
保存
转到工作表并在单元格中键入任何值,然后返回编辑器并单击View > Logs
:
未找到用户日志。请运行您的脚本,然后重试。
我希望看到例如" A15
"
为什么每当我进行编辑时都没有看到任何内容?
我还尝试使用简单的触发器函数,将函数名称更改为onEdit()
但同样的事情;没有结果。
答案 0 :(得分:2)
我不知道这个问题的根本原因,但这就是我所说的Logger的“片状行为”。
onEdit
函数时,它都会获得一个新的执行环境,其中包括空白日志。 (因此,如果您进行两次编辑,则第二次将清除第一个日志。)在某种程度上,你的代码“对我有用”,因为我没有经过修改就运行它并且确实显示了日志 - 只是不是每次都有。这让人很难相信。
还有其他情况会使内置Logger不适合。
由于您正在使用电子表格,因此您可以通过其他方式跟踪代码的执行情况:
toast条消息
var ss = e.range.getSheet().getParent();
ss.toast( "Changed cell: "+changed_cell );
用户界面alerts
SpreadsheetApp.getUi().alert( "Changed cell: "+changed_cell );
浏览器messages
Browser.msgBox( "Changed cell: "+changed_cell );
写入电子表格
var logSheet = ss.getSheetByName("Log") || ss.insertSheet("Log");
logSheet.appendRow([ new Date(), "Changed cell: "+changed_cell ] );
在这些选项中,我最喜欢这个。拥有一组持久的日志(每次都不会重置)并拥有时间戳是很好的。它仍然需要遵循适用于触发器的Restrictions - 例如,简单的onEdit()
只能将日志写入其绑定的电子表格中。
您可以进一步采用最后一种方法,并覆盖内置的Logger类,以便项目中的所有日志都转到电子表格中。您可以在Did you know? (You can log to a spreadsheet from client JavaScript!)中详细了解该内容,该内容涵盖了此主题。
以下是所有这些选项的演示:
// from http://stackoverflow.com/a/32150927/1677912
function onEdit(e) {
var changed_cell = e.range.getA1Notation();
// Built-in Logger
Logger.log(changed_cell);
// Toast
var ss = e.range.getSheet().getParent();
ss.toast( "Changed cell: "+changed_cell );
// Alert
SpreadsheetApp.getUi().alert( "Changed cell: "+changed_cell );
// Write to spreadsheet
Browser.msgBox( "Changed cell: "+changed_cell );
var logSheet = ss.getSheetByName("Log") || ss.insertSheet("Log");
logSheet.appendRow([ new Date(), "Changed cell: "+changed_cell ] );
}