创建电子表格并使用特定数据填充它们

时间:2014-12-09 00:38:10

标签: javascript google-apps-script google-sheets

目标是从所有标签内的传入和传出消息中收集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 。电子表格会将某个电子邮件标签名称作为标题,我希望将与该标签相关的所有电子邮件输入该电子表格。

1 个答案:

答案 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()实际插入数据。