我有这个代码。我设置了一个时间触发器来检索每个员工的姓名,电子邮件域中的电子邮件地址,为其分配主键并将其写在电子表格中。我为出勤系统做了那个。但是当执行时间超过5分钟时,我无法从电子邮件域中检索整个员工姓名和电子邮件地址。 我能做什么? 请帮忙。 谢谢!
function primarykeyrecord(){
var lastval;
var sheet=getData();
var data = sheet.getDataRange().getValues();
lastval=data[data.length-1][0];
if(lastval !== "primarykeyvalue"){
lastval=lastval+1;
}
else {
lastval=1;
}
// Logger.log( lastval);
return lastval;
}
// list all the user from the domain
function listAllUsers() {
var pageToken, page;
var today =methodtimenow();
do {
page = AdminDirectory.Users.list({
domain: '',
//orderBy: 'givenName',
maxResults: 300,
pageToken: pageToken
});
users = page.users;
userslength=users.length; // the number of user from the email domain
if (users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
var sheet = getData();
var lastval=primarykeyrecord();
var range = sheet.getRange(sheet.getLastRow()+1, 1, 1, 4);
var values = [[lastval,today,user.primaryEmail,user.name.fullName ]];
range.setValues(values);
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
//Logger.log(values);
}
答案 0 :(得分:2)
您的脚本超时的原因是,您递归调用setValues()和getValue()。两者都是资源密集型过程,应尽可能少量使用,改为使用批量更新。
以下代码获取values数组中的所有用户数据,并在最后一次添加数组。
function listAllUsers() {
var pageToken, page;
var today =methodtimenow();
var lastval=primarykeyrecord(); //Access the last value once and then keep adding one
var values = [] //Create empty array
do {
page = AdminDirectory.Users.list({
domain: '',
//orderBy: 'givenName',
maxResults: 300,
pageToken: pageToken
});
users = page.users;
userslength=users.length; // the number of user from the email domain
if (users) {
// And all the user data to values array
for (var i = 0; i < users.length; i++) {
var user = users[i];
var temp = [lastval,today,user.primaryEmail,user.name.fullName ];
values.push(temp)
lastval++; //Increase key value by one
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
var sheet = getData();
var lastRow = sheet.getLastRow()
var range = sheet.getRange(lastRow+1, 1, values.length, 4);
range.setValues(values);
//Logger.log(values);
}
希望有所帮助!