自动将XML提取到特定的Google电子表格

时间:2016-04-27 13:34:53

标签: xml google-apps-script

我正在编写一段代码,可以为我的工作流程做出很多贡献。我每天都会通过一个xml附件收到一封邮件到我的Gmail中的某个标签,我希望将其提取到特定的电子表格中。我正在尝试构建的是一个带有谷歌应用程序脚本的脚本,它将能够:

  1. 在我的Gmail(Label_Name)中找到特定标签
  2. 从该标签(XML文件)
  3. 中的未读邮件中查找附件
  4. 将附件数据(XML)提取到我的Google云端硬盘中的特定Google电子表格中。
  5. 我的代码如下所示:

    function RetrieveFeedAttachment() {
      var label = GmailApp.getUserLabelByName("Label_Name");
      var threads = label.getThreads();
      var feed = SpreadsheetApp.openById("The_Specific_Spreadsheet_ID").getSheetByName("Spreadsheet_Name");
      feed.clearContents();
    
      for (var i = 0; i < threads.length; i++) {
        if (threads[i].isUnread()) {
          var msg = GmailApp.getMessagesForThread(threads[i]);
          var xmlDoc = XmlService.parse(msg[0].getAttachments());
          for(var j = 0; j < msg.length; j++) {
            feed.appendRow(xmlDoc.getContent(j));
          }
         threads[i].markRead();
        }
      }
    }
    

    当我运行脚本调试器时,它向我显示以下通知“第1行出错:prolog中不允许内容。(第10行,文件”代码“)”

    感谢您提供建议\帮助!

1 个答案:

答案 0 :(得分:1)

方法getAttachments()返回附件数组。这不是XmlService可以解析的XML文件。方法XmlService.parse()接受字符串

如果你可以假设只有一个附件,那么

msg[0].getAttachments()[0].getDataAsString()

应该为您提供一个可以使用XmlService.parse()解析的字符串。否则,遍历附件数组。

您可能还希望将XmlService.parse()放入try-catch块,以防出现带有非XML附件的消息。