来自null的Google Apps子串

时间:2014-11-13 10:39:31

标签: google-apps-script google-sheets

我将我的第一个Google Apps脚本放在一起,以便将电子邮件写入电子表格。它工作正常,除了我想用来缩短消息体的子字符串方法。脚本引擎返回“无法从null [...]调用子字符串”。我找到了这个帖子(google apps script TypeError: Cannot call method "substring" of undefined),但解决方案没有帮助 - 或者我不明白它的可能性很大。

这是我的剧本。

function labelToSpreadsheet() {

  var threads = GmailApp.getUserLabelByName('newaddress').getThreads();
  var spreadsheet = SpreadsheetApp.openById("onehellofanID")

  var sheet = spreadsheet.getSheets()[0];

  Logger.log (spreadsheet.getName());

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

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

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

      var shortendContent = messages[j].getPlainBody().substring(0, 500);

      sheet.appendRow([messages[j].getSubject(), messages[j].getFrom(), messages[j].getReplyTo(), messages[j].getDate(), shortendContent]);

    }
  } 
};

1 个答案:

答案 0 :(得分:1)

这让我疯了,因为你的代码没有理由不起作用,我也得到同样的错误。我把它缩小到'getPlainBody()'返回'null',但是无法弄清楚为什么即使I used GMails own example也是如此。

当我意识到发生的事情是某些消息 在身体中没有返回任何内容时,我几乎将它称为一个错误。具体来说,有些公司会发送完全不是文本内容的新闻通讯,但实际上是图像,其中包含内容(我的测试标签中的第一条消息就是这种情况,因此我疯了)。

所以,这里的问题是你正在运行它的标签有一些消息,其内容一个图像,没有任何文本(或者可能,只是完全空白),因此'getPlainBody()'返回'那里什么都没有'(Null),你不能得到任何东西的子串。

一个简单的'if'语句实际上很好地处理了这个错误,因为你可以告诉脚本写入表单'此消息的内容是一个图像'(或者你想要的任何内容)。

这个稍微修改过的代码版本适用于我:

function labelToSpreadsheet() {

  var threads = GmailApp.getUserLabelByName(LABELNAME).getThreads();
  var spreadsheet = SpreadsheetApp.openById(SHEETID);

  var sheet = spreadsheet.getSheets()[0];

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

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

    for (var j = 0; j < messages.length; j++) {
      if(messages[j].getPlainBody() == null){
        var shortendContent = 'This message was an image';
      }else{
        var shortendContent = messages[j].getPlainBody().substring(0, 500);
      };

      sheet.appendRow([messages[j].getSubject(), messages[j].getFrom(), messages[j].getReplyTo(), messages[j].getDate(), shortendContent]);
    }
  } 
};

我为这个给自己一个金星,想弄清楚这很烦人。