0

我正在嘗試爲我們的團隊創建活動報告,這需要包括每個團隊成員發送的電子郵件數量。Google Apps腳本在Google電子表格中輸出每個用戶每週發送的電子郵件數量

我一直在試圖生成一個腳本,它返回每個用戶在上週發送的電子郵件數量,並將結果保存在Google電子表格中。

我想每7天觸發一次腳本,併爲每個唯一用戶和日期追加一行。因此,每一行的輸出將是:日期/用戶/ num_emails_sent

任何人都可以幫忙嗎?

+0

[?爲什麼?「有人可以幫助我」不是一個實際問題(http://meta.stackoverflow.com/q/284236) –

回答

0

這似乎這樣的伎倆:

/* 
* 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); 
} 
0

您可以在腳本中添加觸發器。

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(); 
} 

或者你在谷歌應用程序的腳本編輯器中添加觸發器。

+0

謝謝塞布,我已經研究出如何向腳本添加觸發器。我無法做到的是將電子郵件發送的信息拖入電子表格中... – j802d

相關問題