目标是从所有标签内的传入和传出消息中收集gmail数据,并将信息记录到各种电子表格中,分别对应于它们所属的标签。
基本上 - 标签将确定其对应的gmail数据所属的电子表格。我目前将其全部设置为单个电子表格。这种方法很快就会变得无法管理。
for (var l = 0; l < labels.length; l++) {// ** Runs a for-loop over "labels array".
var label = labels[l].getName();//Gets "this" label name.
var labelThreads = GmailApp.getUserLabelByName(label).getThreads(start, end);//Gets threads in "this" label. (*Set Limits Here*)
var labelMessages = GmailApp.getMessagesForThreads(labelThreads);//Gets array with each email from "this" thread.
for (var t = 0; t <labelThreads.length; t++){// ** Runs a for-loop over threads in a label.
if (labelMessages[t] == undefined){}// If it's empty, skip.
else {// If it's not empty.
emailBody.push([" "]);
emailFrom.push([labelMessages[t][0].getFrom()]);
emailTo.push([labelMessages[t][0].getTo()]);
emailDate.push([Utilities.formatDate(labelMessages[t][0].getDate(), "GMT", "MMM d, EEE, yyyy - HH:mm")]);
emailSubject.push([labelMessages[t][0].getSubject()]);
emailLabel.push([labels[l].getName()]);
}
}
// ** THEN, LOG THE FILLED DATA ARRAYS TO ROWS **
//getSheetValues(startRow, startColumn, numRows, numColumns)
mySheet.getRange(2,2,emailLabel.length,1).setValues(emailLabel);
mySheet.getRange(2,4,emailFrom.length,1).setValues(emailFrom);
mySheet.getRange(2,3,emailTo.length,1).setValues(emailTo);
mySheet.getRange(2,1,emailDate.length,1).setValues(emailDate);
mySheet.getRange(2,5,emailSubject.length,1).setValues(emailSubject);
mySheet.getRange(2,6,emailBody.length,1).setValues(emailBody);
}
}
虽然我能够以编程方式创建与我的所有标签同名的电子表格,但我不太清楚如何选择并使用正确的电子邮件数据填充它们。
据我所知,我的代码目前有效,因为每个数组中都会捕获相同数量的电子邮件数据,因此所有数据行都排列在#34;阵容&#34; (此信息在(开始,结束)提供。
完整代码:http://pastie.org/9768890
更新 - 澄清问题:具体问题是 - 如何将存储在数组中的信息(emailFrom,emailTo,emailDate,emailSubject,emailLabel)分成单独的工作表 - by label 。电子表格会将某个电子邮件标签名称作为标题,我希望将与该标签相关的所有电子邮件输入该电子表格。
答案 0 :(得分:1)
以下是打开特定电子表格文档(不一定是活动文档)的一种方法:
var ss = SpreadsheetApp.openById("id");
其中“id”是表示文档ID的字符串。如果电子表格的网址为“https://docs.google.com/spreadsheets/d/abc123/edit#gid=0”,则ID为“abc123”。
从那里,你可以访问这样的单张纸:
var sheet = ss.getSheetByName("name");
其中“name”是表示工作表名称的字符串。
获得sheet
变量(或任何您想要命名的变量)后,您可以像以前一样插入数据:使用getRange()获取您想要数据的范围,以及setValues()实际插入数据。