Dou*_*Fir 4 javascript google-sheets google-apps-script
我写了一个小函数:
function weeklyCurrency(e) {
var changed_cell = e.range.getA1Notation();
Logger.log(changed_cell);
}
Run Code Online (Sandbox Code Playgroud)
然后将其设置为可安装的 onEdit 触发器:
Resources > current projects triggers > weeklyCurreency > onEdit
Run Code Online (Sandbox Code Playgroud)
已保存
转到工作表并在单元格中键入任何值,然后返回编辑器并单击View > Logs
:
未找到用户日志。请运行您的脚本并重试。
我希望看到例如“ A15
”。
为什么每次编辑时都看不到任何东西?
我还尝试通过将函数名称更改为onEdit()
相同的内容来使用简单的触发器函数;没有结果。
我不知道这个问题的根本原因,但这就是我所说的 Logger 的“片状行为”。
onEdit
触发函数时,它都会获得一个新的执行环境,其中包括空白日志。(因此,如果您进行两次编辑,第二次将清除第一个日志。)在某种程度上,您的代码“对我有用”,因为我在没有修改的情况下运行它并且确实显示了日志 - 不是每次都显示。这让人很难相信。
还有其他情况使内置 Logger 不合适。
由于您在电子表格中工作,因此您可以通过其他方式来跟踪代码的执行情况:
吐司消息
var ss = e.range.getSheet().getParent();
ss.toast( "Changed cell: "+changed_cell );
Run Code Online (Sandbox Code Playgroud)用户界面警报
SpreadsheetApp.getUi().alert( "Changed cell: "+changed_cell );
Run Code Online (Sandbox Code Playgroud)浏览器消息
Browser.msgBox( "Changed cell: "+changed_cell );
Run Code Online (Sandbox Code Playgroud)写入电子表格
var logSheet = ss.getSheetByName("Log") || ss.insertSheet("Log");
logSheet.appendRow([ new Date(), "Changed cell: "+changed_cell ] );
Run Code Online (Sandbox Code Playgroud)
在这些选项中,我最喜欢这个。有一组持久的日志(不会每次都重置)和时间戳很好。它仍然需要遵循适用于触发器的限制- 例如,一个简单的onEdit()
只能将日志写入它绑定到的电子表格。
您可以进一步采用最后一种方法,并覆盖内置的 Logger 类,以便项目中的所有日志都转到电子表格。您可以在您知道吗?(您可以从客户端 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 ] );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1358 次 |
最近记录: |