我正在嘗試爲我們的團隊創建活動報告,這需要包括每個團隊成員發送的電子郵件數量。Google Apps腳本在Google電子表格中輸出每個用戶每週發送的電子郵件數量
我一直在試圖生成一個腳本,它返回每個用戶在上週發送的電子郵件數量,並將結果保存在Google電子表格中。
我想每7天觸發一次腳本,併爲每個唯一用戶和日期追加一行。因此,每一行的輸出將是:日期/用戶/ num_emails_sent
任何人都可以幫忙嗎?
我正在嘗試爲我們的團隊創建活動報告,這需要包括每個團隊成員發送的電子郵件數量。Google Apps腳本在Google電子表格中輸出每個用戶每週發送的電子郵件數量
我一直在試圖生成一個腳本,它返回每個用戶在上週發送的電子郵件數量,並將結果保存在Google電子表格中。
我想每7天觸發一次腳本,併爲每個唯一用戶和日期追加一行。因此,每一行的輸出將是:日期/用戶/ num_emails_sent
任何人都可以幫忙嗎?
這似乎這樣的伎倆:
/*
* 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);
}
您可以在腳本中添加觸發器。
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();
}
或者你在谷歌應用程序的腳本編輯器中添加觸發器。
謝謝塞布,我已經研究出如何向腳本添加觸發器。我無法做到的是將電子郵件發送的信息拖入電子表格中... – j802d
[?爲什麼?「有人可以幫助我」不是一個實際問題(http://meta.stackoverflow.com/q/284236) –