简体   繁体   English

Google脚本执行时间

[英]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:344 EDT] Sheet.getRange([S6]) [19.454 seconds] [17-03-18 12:23:48:344 EDT] Sheet.getRange([S6])[19.454秒]

[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:844 EDT] Sheet.getRange([T6]) [20.497 seconds] [17-03-18 12:24:08:844 EDT] Sheet.getRange([T6])[20.497秒]

[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM