Google apps script Fusion tables importRows通过应用程序脚本失败次数超过

Google apps script Fusion tables importRows通过应用程序脚本失败次数超过,google-apps-script,google-fusion-tables,Google Apps Script,Google Fusion Tables,我正试图从GMail帐户中提取csv附件,并将其推送到Fusion表中。它有时可以工作,但大多数情况下会失败,错误为“执行失败:处理导入时出现内部错误。请重试。”来自Fusion表的importRows调用。导入的大小约为4k,远低于1m限制 我将尝试使用Fusion table SQL INSERT选项而不是importRows,但只是想看看我是否在importRows调用中出错。我甚至在两次调用之间设置了5秒的延迟,以查看是否需要更慢地输入融合表 以下是应用程序脚本: function ge

我正试图从GMail帐户中提取csv附件,并将其推送到Fusion表中。它有时可以工作,但大多数情况下会失败,错误为“执行失败:处理导入时出现内部错误。请重试。”来自Fusion表的importRows调用。导入的大小约为4k,远低于1m限制

我将尝试使用Fusion table SQL INSERT选项而不是importRows,但只是想看看我是否在importRows调用中出错。我甚至在两次调用之间设置了5秒的延迟,以查看是否需要更慢地输入融合表

以下是应用程序脚本:

function getDataFromMailbox() {
  var tableID = "XXXXXXXX"; 
  var threads = GmailApp.getInboxThreads();
  if (threads.length) {
    var thread = threads.pop();
    var messages = thread.getMessages();
    for (var j=0; j < messages.length; j++) {
      var message = messages[j];
      if ( message.isUnread() ) {
        var from = message.getFrom();
        if (from == "xxxxxx@gmail.com") {
          var attachments = message.getAttachments();
          for (var k=0; k< attachments.length; k++) {
            var attachment = attachments[k];
            Logger.log( attachment.getSize() );
            FusionTables.Table.importRows(tableID, attachment, {startLine:2});
          }
        } else {
          thread.moveToTrash(); // Thread isn't from our source
        }
        message.markRead();
      }
    }
    Logger.log("Processed %s messages", messages.length);
    if ( !thread.isUnread() ) { thread.moveToArchive(); }
  }
}
函数getDataFromMailbox(){ var tableID=“XXXXXXXX”; var threads=GmailApp.getInboxThreads(); if(螺纹长度){ var thread=threads.pop(); var messages=thread.getMessages(); 对于(var j=0;j我终于有机会再次调查此事。看来睡眠电话是关键。如果在融合表导入后我有5秒钟的睡眠,我会得到导入错误。如果我将脚本休眠10秒,就会出现超时错误。7秒似乎恰到好处(至少在今天)。这是我的更新脚本,以防有人想将数据记录到gmail帐户,然后用应用程序脚本将其拉到Fusion表中

function getDataFromMailbox() {
  var tableID = "XXXXXXXXXXXXXXXXXX";

  var threads = GmailApp.getInboxThreads();
  while (threads.length) {
    var thread = threads.pop();
    var messages = thread.getMessages();
    for (var j=0; j < messages.length; j++) {
      var message = messages[j];
      if ( message.isUnread() ) {
        var from = message.getFrom();
        if (from == "XXXXXXXXX@gmail.com") {
          var attachments = message.getAttachments();
          for (var k=0; k< attachments.length; k++) {
            var attachment = attachments[k];

            var attString = attachment.getDataAsString();
            var lines = attString.match(/^.*((\r\n|\n|\r)|$)/gm);
            lines.shift(); lines.shift();

            Logger.log( lines.length );
            FusionTables.Table.importRows(tableID, attachment, {startLine:2});
          }
        } else {
          thread.moveToTrash(); // Thread isn't from our source
        }
        Logger.log( "Processed message: " + message.getId() );
        message.markRead();
        Utilities.sleep(7000);  // Wait for fusion tables to catch up
      }
    }
    Logger.log("Processed %s messages", messages.length);
    if ( !thread.isUnread() ) { thread.moveToArchive(); }
  }
}
函数getDataFromMailbox(){ var tableID=“xxxxxxxxxxxxxxxx”; var threads=GmailApp.getInboxThreads(); while(线程长度){ var thread=threads.pop(); var messages=thread.getMessages(); 对于(var j=0;j即使使用指数退避(),我也会得到同样的结果,但即使经过20秒的延迟,我仍然会在第二次调用importRows时得到错误。