[英]Google Script Execution Time
I have the following script to record who edited a field and the date time: 我有以下脚本来记录谁编辑了字段和日期时间:
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetName();
var r = s.getActiveCell();
var live = true;
var row = r.getRow();
var user = Session.getActiveUser();
var time = new Date();
SpreadsheetApp.getActiveSheet().getRange('S' + row.toString()).setValue(time);
SpreadsheetApp.getActiveSheet().getRange('T' + row.toString()).setValue(user);
};
It takes 30 seconds for the updates to appear in my sheet. 更新需要30秒才能显示在我的工作表中。 Looking at the execution log, I see this takes 40 seconds to complete, with just getting the values of S6 and T6 being the problem.
查看执行日志,我发现这需要40秒钟才能完成,仅获得S6和T6的值就成为问题。
How can I speed this up? 我怎样才能加快速度?
[17-03-18 12:23:28:831 EDT] SpreadsheetApp.getActiveRange() [0 seconds]
[17-03-18 12:23:28:831 EDT] Range.getRow() [0 seconds]
[17-03-18 12:23:28:831 EDT] Range.getLastRow() [0 seconds]
[17-03-18 12:23:28:831 EDT] Range.getColumn() [0 seconds]
[17-03-18 12:23:28:831 EDT] Range.getLastColumn() [0 seconds]
[17-03-18 12:23:28:831 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[17-03-18 12:23:28:833 EDT] Session.getActiveUser() [0.001 seconds]
[17-03-18 12:23:28:833 EDT] User.getEmail() [0 seconds]
[17-03-18 12:23:28:835 EDT] Starting execution
[17-03-18 12:23:28:841 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[17-03-18 12:23:28:843 EDT] SpreadsheetApp.getActiveSheet() [0 seconds]
[17-03-18 12:23:28:843 EDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[17-03-18 12:23:28:887 EDT] Spreadsheet.getSheetName() [0.044 seconds]
[17-03-18 12:23:28:888 EDT] Sheet.getActiveCell() [0 seconds]
[17-03-18 12:23:28:889 EDT] Range.getRow() [0 seconds]
[17-03-18 12:23:28:889 EDT] Range.getColumn() [0 seconds]
[17-03-18 12:23:28:889 EDT] Range.getColumn() [0 seconds]
[17-03-18 12:23:28:889 EDT] Range.getRow() [0 seconds]
[17-03-18 12:23:28:889 EDT] Session.getActiveUser() [0 seconds]
[17-03-18 12:23:28:890 EDT] SpreadsheetApp.getActiveSheet() [0 seconds]
[17-03-18 12:23:48:345 EDT] Range.setValue([Sat Mar 18 12:23:28 GMT-04:00 2017]) [0 seconds]
[17-03-18 12:23:48:346 EDT] SpreadsheetApp.getActiveSheet() [0 seconds]
[17-03-18 12:24:08:847 EDT] Execution failed: Exceeded maximum execution time [40.002 seconds total runtime]
Change: 更改:
var user = Session.getActiveUser();
to: 至:
var user = Session.getActiveUser().getEmail();
Or a faster way. 还是更快的方法。 Use the event data returned by onEdit:
使用onEdit返回的事件数据:
function onEdit(e) {
var row = e.range.getSheet().getActiveCell().getRow()
var user=e.user
e.range.getSheet().getRange('S' + row.toString()).setValue(Utilities.formatDate(new Date(), "GMT-6:00", "MM/dd/yyyy HH:mm:ss"));
e.range.getSheet().getRange('T' + row.toString()).setValue(user);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.