Google 用于在 google 电子表格中输出每个用户每周发送的电子邮件数量的 Apps 脚本

Google Apps Script to output in a google spreadsheet the number of emails sent by each user each week

我正在尝试为我们的团队创建一个 activity 报告,其中需要包括每个团队成员发送的电子邮件数量。

我一直在尝试生成一个脚本,其中 returns 每个用户上周发送的电子邮件数量,并将结果保存在 google 电子表格中。

我想每 7 天触发一次脚本,并为每个唯一用户和日期附加一个新行。所以每行输出将是:Date / User / num_emails_sent

有人可以帮忙吗?

您可以在脚本中添加触发器。

APi -> https://developers.google.com/apps-script/reference/script/clock-trigger-builder

一个例子:

    function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('getEmails')
      .timeBased()
      .everyHours(1)
      .create();
}

或者您在 google 应用程序脚本编辑器中添加触发器。

这似乎可以解决问题:

/*
* UI - Menu function
*/
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Mail Reports')
  .addItem('Generate User Report', 'generateUserReport')
  .addToUi();
}

/*
* Main function to generate report
*/
function generateUserReport(){
// Get dates [perdiod start = week ago, period end = today]
var dates = getInterval();
var start = dates[0];
var end   = dates[dates.length-1];
// Get users and dates in spreadsheet
listAllUsers();

// Loop over sheet and add values
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var data  = sheet.getDataRange().getValues();
for( var i =1; i < data.length; i++){
if(data[i][1] === ''){
  sheet.getRange(i+1, 2).setValue(start);
  sheet.getRange(i+1, 3).setValue(end);

  var sent = 0;
  var received = 0;

  dates.forEach(function(date){
    var res = getMailsReports(data[i][0], date);
    sent     = sent + Number(res.sent);
    received = received + Number(res.received);
  })

  sheet.getRange(i+1, 4).setValue(sent);
  sheet.getRange(i+1, 5).setValue(received);
}
}

}


/*
* Get Mail reports 
* Sent / Saved number
*/
function getMailsReports(user, date){

var parameters =  ['gmail:num_emails_sent', 'gmail:num_emails_received'];
var page = AdminReports.UserUsageReport.get(user, date, {
  parameters: parameters.join(',')
});


return res = {
received : page.usageReports[0].parameters[0].intValue,
sent     : page.usageReports[0].parameters[1].intValue,
}
}



/**
* Slice dates
*/

function getInterval(){

var end      = new Date(new Date().getTime() - 2 * 24 * 60 * 60 * 1000);
var start    = new Date(end.getTime() - 6 * 24 * 60 * 60 * 1000);
var timezone = Session.getScriptTimeZone();

var res = getDates(start, end).map(function(date){
return Utilities.formatDate(date, timezone, 'yyyy-MM-dd');
})

return res;
}

Date.prototype.addDays = function(days) {
var dat = new Date(this.valueOf())
dat.setDate(dat.getDate() + days);
return dat;
}

function getDates(startDate, stopDate) {
var dateArray = new Array();
var currentDate = startDate;
while (currentDate <= stopDate) {
    dateArray.push( new Date (currentDate) )
    currentDate = currentDate.addDays(1);
}
return dateArray;
}



/*
* List all users in the domaine
*/
function listAllUsers() {
var pageToken, page;
do {
page = AdminDirectory.Users.list({
  domain: 'XXXXX.com',
  orderBy: 'givenName',
  maxResults: 100,
  pageToken: pageToken
});
var users = page.users;
if (users) {
  for (var i = 0; i < users.length; i++) {
    var user = users[i];

SpreadsheetApp.getActive().getActiveSheet().appendRow([user.primaryEmail])
  }
} else {
  Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
}