从gmail抓取html表格,并使用谷歌应用程序脚本放入谷歌表格

Grab html table from gmail and put in google sheets using google apps script

本文关键字:表格 谷歌 应用程序 脚本 抓取 gmail html      更新时间:2023-09-26

我是google apps脚本的新手。我正试图写一个谷歌应用程序脚本,将采取从gmail表,并把数据到谷歌表。

电子邮件正文有点像下面的

CONFIRMATION CODE        GUEST'S NAME    GUEST'S EMAIL    GUEST'S PHONE
      A1                   Name          someone@gmail      012377777

到目前为止,我已经尝试了以下代码来获取电子邮件中的数据并将其推送到电子表格中。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSheet();
  var label = GmailApp.getUserLabelByName("[Gmail]/test");
  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);
  }
  
  }

messages[j].getBody()给出如下html

<u></u>
    
<div>
<table cellpadding="3" style="font-size:.9em">
    <thead>
    
    <tr>
        
            <th>CONFIRMATION CODE</th>
        
            <th>GUEST&#39;S NAME</th>
        
            <th>GUEST&#39;S EMAIL</th>
        
            <th>GUEST&#39;S PHONE</th>
        
    </tr>
    </thead>
    <tbody>
    
    <tr>
        
        <td>
            
            A1
            
        </td>
        
        <td>
            
            Name
            
        </td>
        
        <td>
            
            someone@gmail 
            
        </td>
        
        <td>
            
            012377777
            
        </td>
        
    </tr>
    
    </tbody>
</table>
</div>

接下来,我尝试使用下面的

来解析它

  var msg = threads[0].getMessages();
       
var rows = Xml.parse(msg[0].getBody(),true).getElement()
          .getElement("div")
          .getElement("table")
          .getElement("tbody")
          .getElements("tr");
  

但这抛出我的错误"TypeError:不能调用方法"getElement"的null。"我没有太多的XML经验,所以请告诉我我在这里做错了什么。谢谢:)

看起来您调用了. getelement()而没有指定您希望它获取的元素。看一下文档,XmlService似乎是api的当前实现,因此您可能希望使用为它提供的函数,而不是XML对象中已弃用的版本。https://developers.google.com/apps-script/reference/xml-service/

看起来你可以这样做:

 var document = XmlService.parse(xml);
 var content = document.getAllContent();

返回一个元素数组

您可以使用Anders建议的方法,但是由于电子邮件的内容没有根元素,这是XMLService要求作为解析的一部分。

您必须在电子邮件内容的两端附加根元素。

我建议在发送给解析方法

之前总是写第1行
var xml = "<root>" + messageBody + "</root>"     
var document = XmlService.parse(xml);
var content = document.getAllContent();