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

时间:2016-08-16 16:38:04

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

我是谷歌应用脚​​本的新手。我正在尝试编写一个谷歌应用程序脚本,该脚本将从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);
  }
  
  }
&#13;
&#13;
&#13;

messages [j] .getBody()给了我以下html

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

接下来,我尝试使用以下

解析此问题

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

但是这给我带来了错误&#34; TypeError:无法调用方法&#34; getElement&#34;为null。 &#34;我对XML没有太多经验,所以请你告诉我这里我做错了什么。 谢谢:))

2 个答案:

答案 0 :(得分:0)

看起来你正在调用.getElement()而没有指定你想要的元素。查看文档,XmlService似乎是api的当前实现,因此您可能希望使用为其提供的函数而不是XML对象中不推荐使用的版本。 https://developers.google.com/apps-script/reference/xml-service/

看起来你可以按照以下方式做点什么:

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

将返回一个元素数组。

答案 1 :(得分:0)

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

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

我建议在将第1行发送到解析方法之前始终写第1行

var xml = "<root>" + messageBody + "</root>"     
var document = XmlService.parse(xml);
var content = document.getAllContent();