当前位置: 首页 > 知识库问答 >
问题:

Google应用程序脚本-从gmail中提取数据到电子表格中

钱朝明
2023-03-14

把所有信息写到电子表格中。

删除唯一的标记信息以防止重复运行。

然后使用form mule addon从电子表格发送电子邮件。

到目前为止,我已经处理了第1步(简单),而第2步和第3步(我不是一个编码器,我可以读、解串和黑。从头开始写是完全不同的事情)。我以前处理过4次,我认为这是最好的处理方法。

通过脚本,我将信息提取到电子表格中,通过插件,我使用电子表格中的信息发送电子邮件。

这是我到目前为止编写的代码。我将regex部分留到后面,因为我甚至无法在电子表格中写入任何内容。一旦我开始工作,我将开始在regex中工作,并“删除脚本的标签”方面。

function myFunction() {
  function getemails() {
    var label = GmailApp.getUserLabelByName("Main tag/subtag");
    var threads = label.getThreads();
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages();  
      for (var j = 0; j < messages.length; j++) {
    var message=messages[j];
    var subject=message.getSubject();
    tosp(message);
      }
     }
  }

  function tosp(message){
    var body=message.getBody()
    var date=message.getDate();
    var subject=message.getSubject(); 
    var id= "my spreasheet id";
    var ss = SpreadsheetApp.openById(id);
    var sheet = ss.getActiveSheet();
    sheet.appendRow(subject,date,body);    

}
} 

如有任何帮助,我们将不胜感激。

谢谢塞巴斯蒂安

共有1个答案

宋勇
2023-03-14

下面是我编写和测试的代码,它完美地执行了您提到的步骤2、3和4。

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();

  var label = GmailApp.getUserLabelByName("MyLabel");
  var threads = label.getThreads();

  for (var i=0; i<threads.length; i++)
  {
    var messages = threads[i].getMessages();

    for (var j=0; j<messages.length; j++)
    {
      var msg = messages[j].getBody();
      var sub = messages[j].getSubject();
      var dat = messages[j].getDate();

      ss.appendRow([msg, sub, dat])
    }
      threads[i].removeLabel(label);
  }
}

代码中的一个错误是appendrow函数接受[]括号中指定的元素数组。

根据您附加此脚本的位置,您的代码行:

var ss = SpreadsheetApp.openById(id);
var ss = SpreadsheetApp.getActiveSheet();

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");

另一个建议是,当前代码将给您HTML格式的消息。因此,如果您想以纯文本形式获得您所看到的消息,请使用:

var msg = messages[i].getPlainBody();

现在您可以为regex编写另一个函数,并将消息msg传递给该函数。希望这有帮助!

 类似资料: