【问题标题】:Exporting Gmail Labels to Google Sheets将 Gmail 标签导出到 Google 表格
【发布时间】:2021-09-25 04:26:28
【问题描述】:

我有一个应用程序脚本,可以将数据从我的 gmail 收件箱提取到 google 表格,以根据哪个标签分析电子邮件。我创建了一个数组来提取电子邮件的发件人、日期、主题和正文,但我想将每一行的相关标签添加到第一列,如第 24 行所示。

如何将标签添加到第一列?

var ui = SpreadsheetApp.getUi();
function onOpen(e){

ui.createMenu("Gmail Manager").addItem("Get Emails by Label", "getGmailEmails").addToUi();

}

function getGmailEmails() {

 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var label = sheet.getRange(1,3).getValue();
 var after = sheet.getRange(2,3).getDisplayValue();
 var before = sheet.getRange(3,3).getDisplayValue();
 var threads = GmailApp.search ("label:"+label + " AND " + "after:"+after + " AND " + "before:"+before);

//console.log("label:"+label + " AND " + "after:"+after + " AND " + "before:"+before);

 for (var i = 0; i<threads.length; i++){

  let messages = threads[i].getMessages();

  for (var j = 0; j<messages.length; j++){

  //sheet.getRange(i+6,1).setValue(messages[j].getLabels());
  sheet.getRange(i+6,2).setValue(messages[j].getFrom());
  sheet.getRange(i+6,3).setValue(messages[j].getFrom().replace(/^,+<([^>]+)>$/, "$1"));
  sheet.getRange(i+6,4).setValue(messages[j].getDate());
  sheet.getRange(i+6,5).setValue(messages[j].getSubject());
  sheet.getRange(i+6,6).setValue(messages[j].getPlainBody());
    }
   }
  }

【问题讨论】:

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


    【解决方案1】:

    我以为你脚本的修改点如下。

    • getLabels() 的方法适用于 GmailThread 类。
    • setValue在循环中使用时,处理成本会很高。

    当上面的修改点反映到你的脚本中时,变成如下。

    修改脚本:

    function getGmailEmails() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var label = sheet.getRange(1, 3).getValue();
      var after = sheet.getRange(2, 3).getDisplayValue();
      var before = sheet.getRange(3, 3).getDisplayValue();
      var threads = GmailApp.search("label:" + label + " AND " + "after:" + after + " AND " + "before:" + before);
    
      // I modified below script.
      var values = [];
      for (var i = 0; i < threads.length; i++) {
        var temp = [];
        var label = threads[i].getLabels().map(e => e.getName()).join(",");
        let messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
          temp.push([
            label,
            messages[j].getFrom(),
            messages[j].getFrom().replace(/^,+<([^>]+)>$/, "$1"),
            messages[j].getDate(),
            messages[j].getSubject(),
            messages[j].getPlainBody()
          ]);
        }
        values = values.concat(temp);
      }
      sheet.getRange(6, 1, values.length, values[0].length).setValues(values);
    }
    

    注意:

    • 在此修改中,当使用多个标签时,将它们用作文本,以, 分隔。关于这一点,请根据您的实际情况进行修改。

    参考资料:

    【讨论】:

    • 这很好用,但有什么方法可以让我使用它来访问委派的收件箱吗?
    • @Allister Lobo 感谢您的回复。我很高兴你的问题得到了解决。关于你is there a way I can use this to access delegated inboxes?的新问题,我不得不为我糟糕的英语水平道歉。那么,您可以通过包含更多信息将其作为新问题发布吗?通过这个,我想尝试理解它。如果你能合作解决你的新问题,我很高兴。你能做到吗?
    • 好的。该脚本适用于单个收件箱。例如,我可以将我的收件箱导入到谷歌表格,如果其他人运行该脚本,他们可以将他们的收件箱导入谷歌表格。如何导入共享收件箱?
    • @Allister Lobo 感谢您的回复。关于你的新问题,我不得不再次为我糟糕的英语水平道歉。不幸的是,我仍然无法理解您的新问题。那么,您可以通过包含更多信息将其作为一个新问题发布吗?通过这个,我想尝试理解它。如果您能合作解决您的新问题,我很高兴。
    • 如果这个有帮助请告诉我stackoverflow.com/questions/69370437/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2021-06-11
    • 2023-01-11
    相关资源
    最近更新 更多