问题加速我的日历检索脚本通过把它放在一个本地数组在谷歌应用程序脚本



我正在编写代码来跟踪我的时间,从Google calendar中检索日历项目并将其写入Google Sheets。

我已经使用批处理数组来加速这个过程,但我觉得我可以让它更快。我曾尝试使用map-function(参见下面的虚线代码,从本教程创建),但没有成功。

我代码:

function getCalendarEvents() {

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data"); 
var cal = CalendarApp.getCalendarById("email@domain.nl"); 
var eind = new Date;
eind.setDate(eind.getDate()+1);
var events = cal.getEvents(new Date("1/1/2022"), eind);

var lr = ss.getLastRow();
ss.getRange(3, 1, lr,14).clearContent();

//  var sd = events.map(function(r){ return [r[0],[2]]} );
//  ss.getRange(3, 2, sd.length,sd[0].length).setValues(sd);
for(var i = 0;i<events.length;i++) {

var sd = events[i].getStartTime();
var title = events[i].getTitle();
var ed = events[i].getEndTime();
var des = events[i].getDescription();
var rec = events[i].isRecurringEvent();
var cre = events[i].getDateCreated();
var upd = events[i].getLastUpdated();
var own = events[i].getCreators();

ss.getRange(i+3, 2).setValue(sd);
ss.getRange(i+3, 2).setNumberFormat("ddd   d-m-yyyy");
ss.getRange(i+3, 5).setValue(ed);
ss.getRange(i+3, 5).setNumberFormat("h:mm");
ss.getRange(i+3, 9).setValue(title);
ss.getRange(i+3, 10).setValue(des);
ss.getRange(i+3, 11).setValue(cre);
ss.getRange(i+3, 12).setValue(upd);
ss.getRange(i+3, 13).setValue(rec);
ss.getRange(i+3, 14).setValue(own);
}  
}

如何将代码与"setValue"批处理数组中的片段(在循环内)?

试试这个(未测试但可以工作)

function getCalendarEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data"); 
var cal = CalendarApp.getCalendarById("email@domain.nl"); 
var eind = new Date;
eind.setDate(eind.getDate()+1);
var events = cal.getEvents(new Date("1/1/2022"), eind);
var lr = ss.getLastRow();
ss.getRange(3, 1, lr,14).clearContent();
var result = []
events.forEach(e => {
result.push([e.getStartTime(),
e.getTitle(),
e.getEndTime(),
e.getDescription(),
e.isRecurringEvent(),
e.getDateCreated(),
e.getLastUpdated(),
e.getCreators()])
})
ss.getRange(3,1,result.length,result[0].length).setValues(result)
}

最新更新