Javascript 使用Gmail应用程序脚本按月分组标签计数

Javascript 使用Gmail应用程序脚本按月分组标签计数,javascript,date,google-apps-script,grouping,gmail-api,Javascript,Date,Google Apps Script,Grouping,Gmail Api,谷歌应用程序脚本/javascript的新功能 为了将数据用作图表元素,我尝试按月对以下代码的结果进行分组,最好的方法是什么: function listLabels(labelcount) { var response = Gmail.Users.Labels.list('me'); if (response.labels.length == 0) { Logger.log('No labels found.'); } else { Logger.log('Labe

谷歌应用程序脚本/javascript的新功能

为了将数据用作图表元素,我尝试按月对以下代码的结果进行分组,最好的方法是什么:

function listLabels(labelcount) {
  var response = Gmail.Users.Labels.list('me');
  if (response.labels.length == 0) {
    Logger.log('No labels found.');
  } else {
    Logger.log('Labels:');
    for (var i = 0; i < response.labels.length; i++) {
      var label = response.labels[i];

      // Use the label name to get the messages that match this label
      var label_messages = Gmail.Users.Messages.list('me', {
        'labelIds': [label.id]
      });

      Logger.log('%s = %s', label.name, label_messages.resultSizeEstimate);
    }
  }
}
函数列表标签(labelcount){
var response=Gmail.Users.Labels.list('me');
if(response.labels.length==0){
Logger.log('未找到标签');
}否则{
Logger.log('Labels:');
对于(var i=0;i
几个月内标签的分发 此函数用于收集每个标签每月和所有月份(不考虑年份)具有给定标签的邮件数。不过,您可以轻松地修改它以过滤掉不需要的年份

每次运行时清除数据后,它会将数据转储到活动电子表格上。为了方便起见,我将数据放入monthly数组中,并使用join()方法显示它们。如果您希望展开这些数据,可以通过拆分列轻松地进行展开。我在该列上方包含了一列,其中包含各个月份的第一个字母

function listLabels() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var response = Gmail.Users.Labels.list('me');
  var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
  var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
  var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
  if (response.labels.length) {
    sh.clearContents();
    sh.appendRow(['Label Name','Monthly Distribution'])
    sh.appendRow(['',miA.join(',')])
    for (var i = 0; i < response.labels.length; i++) {
      var label=response.labels[i];
      var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
      var msgs=label_messages.messages;
      if(msgs) {
        var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
        for(var j=0;j<msgs.length;j++) {
          var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
          mA[m]+=1;
          lA[m]+=1;
        }
        sh.appendRow([label.name,lA.join(',')])
      }
    }
    sh.appendRow(['***********************']);
    sh.appendRow(['***********************']);
    sh.appendRow(['Month','Total Count']);
    for(var i=0;i<12;i++) {
      sh.appendRow([msA[i],mA[i]]);
    }
  }
}
函数列表标签(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var response=Gmail.Users.Labels.list('me');
var msA=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’]
变量miA=['J','F','M','A','M','J','J','A','S','O','N','D']
var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
if(响应.标签.长度){
sh.clearContents();
sh.appendRow(['Label Name','Monthly Distribution'])
sh.appendRow(['',miA.join('','))
对于(var i=0;i
每次运行时清除数据后,它会将数据转储到活动电子表格中。为了方便起见,我将数据放入每月数组中,并使用join()显示它们方法如果您希望展开它们,您可以通过拆分该列来轻松地进行扩展,我在其上方包含了一列,其中包含相应月份的第一个字母

function listLabels() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var response = Gmail.Users.Labels.list('me');
  var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
  var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
  var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
  if (response.labels.length) {
    sh.clearContents();
    sh.appendRow(['Label Name','Monthly Distribution'])
    sh.appendRow(['',miA.join(',')])
    for (var i = 0; i < response.labels.length; i++) {
      var label=response.labels[i];
      var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
      var msgs=label_messages.messages;
      if(msgs) {
        var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
        for(var j=0;j<msgs.length;j++) {
          var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
          mA[m]+=1;
          lA[m]+=1;
        }
        sh.appendRow([label.name,lA.join(',')])
      }
    }
    sh.appendRow(['***********************']);
    sh.appendRow(['***********************']);
    sh.appendRow(['Month','Total Count']);
    for(var i=0;i<12;i++) {
      sh.appendRow([msA[i],mA[i]]);
    }
  }
}
函数列表标签(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var response=Gmail.Users.Labels.list('me');
var msA=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’]
变量miA=['J','F','M','A','M','J','J','A','S','O','N','D']
var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
if(响应.标签.长度){
sh.clearContents();
sh.appendRow(['Label Name','Monthly Distribution'])
sh.appendRow(['',miA.join('','))
对于(var i=0;i对于(var j=0;jCan我能问一下你想要检索的数据的起始年和起始月吗?我能问一下你想要检索的数据的起始年和起始月吗?难以置信!谢谢!-供阅读本文的其他人参考,为了工作,你需要在Apps Script.resources>Advanced Google Se的参考资料部分打开Gmail API服务>打开Gmail API Onal那么你将如何修改以按年度进行细分?谢谢,我也是谷歌脚本新手,这正是我所期望的,也是我正在尝试做的。然而,我有几个带有大量电子邮件的标签,这只是将它们计数到100。是否可以在这个标签上添加一个循环以计数超过100?例如le我有一个标签,从2019年6月开始有379封电子邮件,这个标签上只写了100封。谢谢。@Derek尝试一下最后一个版本。它可能需要一些调试,但你必须自己做,因为我没有保留太多电子邮件。@Cooper非常感谢,我将在这里运行此功能。我通常会删除我的电子邮件,但有些标签的数量非常大-每天有几百个。再次感谢你!难以置信!谢谢!-供阅读本文的其他人参考,为了工作,你需要在应用程序脚本的参考资料部分打开Gmail API。参考资料>高级谷歌服务>打开Gmail API。那么你将如何修改以按年度细分?谢谢我是谷歌谷歌的新手e脚本也是如此,这正是我所期望的,也是我正在尝试做的,但是我有几个标签上有大量的电子邮件,这只是将它们计数到100。是否可以将循环添加到这个标签上,以计数超过这个数?例如,我有一个标签,从2019年6月起有379封电子邮件,这只表明标签上有100封l、 谢谢。@Derek试一试最后一个版本。它可能需要一些调试,但你必须自己调试,因为我没有太多的电子邮件。@Cooper非常感谢你,我会在这里运行一段时间。我通常会删除我的电子邮件,但有些标签的容量非常大-每天有几百封。再次感谢你!
function listLabelsIncludingYears() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var response = Gmail.Users.Labels.list('me');
  var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
  var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
  var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
  var yObj={yA:[]};
  if (response.labels.length) {
    sh.clearContents();
    sh.appendRow(['Label Name','Year','Monthly Distribution'])
    sh.appendRow(['','',miA.join(',')])
    for (var i = 0; i < response.labels.length; i++) {
      var label=response.labels[i];
      var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
      var pagetoken='';
      do{
        var msgs=label_messages.messages;
        if(msgs) {
          var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
          for(var j=0;j<msgs.length;j++) {
            var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
            var y=GmailApp.getMessageById(msgs[j].id).getDate().getFullYear();
            if(yObj.hasOwnProperty(y)) {
              yObj[y][m]+=1;
            }else{
              yObj[y]=[0,0,0,0,0,0,0,0,0,0,0,0,0];
              yObj.yA.push(y);
              yObj[y][m]+=1;
            }
            lA[m]+=1;
          }
          sh.appendRow([label.name,y,lA.join(',')]);
        }
        pagetoken=label_messages.nextPageToken;  
      }while(pagetoken!='');
    }
    SpreadsheetApp.flush();
    sh.getRange(3,1,sh.getLastRow()-2,sh.getLastColumn()).sort({column:2,ascending:true});
    sh.getRange(2,3,sh.getLastRow()-1,1).splitTextToColumns(',');
    sh.autoResizeColumns(1,sh.getLastColumn())
    SpreadsheetApp.flush();
    sh.appendRow(['***********************']);
    sh.appendRow(['***********************']);
    sh.appendRow(['Year','Month','Total Count']);
    yObj.yA.sort();
    for(var k=0;k<yObj.yA.length;k++) {
      for(var i=0;i<12;i++) {
        sh.appendRow([yObj.yA[k],msA[i],yObj[y][i]]);
      }
    }
  }
}