目的是从所有标签中收集来自传入和传出消息的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);
}
}
尽管我能够以编程方式创建与所有标签同名的电子表格,但我不十分了解如何选择正确的电子邮件数据并将其填充。
我知道我的代码当前有效,因为在每个数组中捕获了相同数量的电子邮件数据,因此所有数据行都“排成一行”(此信息在(开始,结束)处提供。
完整代码在这里:http://pastie.org/9768890
更新-明确的问题:具体的问题是-如何将存储在数组中的信息-emailFrom,emailTo,emailDate,emailSubject,emailLabel分成不同的工作表-按标签。电子表格将具有特定的电子邮件标签名称作为标题,我希望将与该标签有关的所有电子邮件输入该电子表格。
最佳答案
这是打开特定电子表格文档(不一定是活动文档)的一种方法:
var ss = SpreadsheetApp.openById("id");
其中“ id”是代表文档ID的字符串。如果电子表格的URL为“ https://docs.google.com/spreadsheets/d/abc123/edit#gid=0”,则ID为“ abc123”。
从那里,您可以像这样访问各个工作表:
var sheet = ss.getSheetByName("name");
其中“名称”是代表工作表名称的字符串。
有了
sheet
变量(或任何想要命名的变量)后,就可以像插入数据一样插入数据:使用getRange()获取所需数据的范围,并使用setValues()实际插入数据。