繁体   English   中英

通过谷歌脚本将表格从 gmail 插入谷歌电子表格

[英]Insert table from gmail to google spreadsheet by google script

我在一天内多次收到一封带有表格的电子邮件,它可以是 10x2 或 40x2 或类似的东西。 每次我需要将此表格粘贴到工作表中,从单元格 A1 开始/现在我有了这个代码,但它将整个表格粘贴到单元格 A1:

var SEARCH_QUERY = "label:inbox is:unread to:me subject:importnumbers";

// Credit: https://gist.github.com/oshliaer/70e04a67f1f5fd96a708

function getEmails_(q) {
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {
            emails.push([msgs[j].getBody().replace(/<.*?>/g, '\n')
                .replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')
            ]);
        }
    }
    return emails;
}  
  function appendData_(sheet, array2d) {

      sheet.getRange(1, 1).setValues(array2d);
      }

    function saveEmails() {
        var array2d = getEmails_(SEARCH_QUERY);
        if (array2d) {
            appendData_(SpreadsheetApp.getActiveSpreadsheet().getSheetByName('numberlist'), array2d);
        }
      markArchivedAsRead ();
    }

    function markArchivedAsRead() {
      var threads = GmailApp.search('label:inbox is:unread to:me subject:importnumberlist');
      GmailApp.markThreadsRead(threads);
    };

请帮我粘贴正确尺寸的表格。

试试这个。

  1. 替换getEmails_(q)函数

代码#1:

function getEmails_(q) {
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {

            var arrStr = msgs[j].getBody()
              .replace(/<\/tr>/gm, '[/tr]')
              .replace(/<\/td>/gm, '[/td]')
              .replace(/<.*?>/g, '\n')
              .replace(/^\s*\n/gm, '')
              .replace(/^\s*/gm, '')
              .replace(/\s*\n/gm, '\n')
              .split("[/tr]");

            var line = [];

            for (var i = 0; i < arrStr.length - 1; i++) {

              line = arrStr[i].split("[/td]");
              line.length -= 1;
              emails.push(line);
            }
        }
    }
    return emails;
}
  1. 替换appendData_函数

代码#2:

 function appendData_(sheet, array2d) {

    var h = array2d.length;
    var l = array2d[0].length;

    sheet.getRange(1, 1, h, l).setValues(array2d);
 } 

此代码将 html 文本转换为二维数组,然后将其粘贴到电子表格中。

附注 2020-06

您的电子邮件可能 (1) 包含多个表格或 (2) 包含合并单元格的表格。 在这种情况下,建议的脚本可能会导致错误:

数据中的列数与范围中的列数不匹配

在这种情况下,您需要创建另一个函数来解析消息正文。 我建议您查看邮件的 HTML 代码并在 Gmail 中检查它:

右键单击>昆虫

或 [Ctrl]+[Shift]+[I]

这种情况下的另一种方法是“按原样”粘贴数据,使用示例函数将任何二维数组转换为矩形:

function convert2ArrayToRectangular_(array2d)
{
  // get max width
  var res = [];
  var w = 0;
  for (var i = 0; i < array2d.length; i++)
  {
    if (array2d[i].length > w) {w = array2d[i].length;}    
  }

  var row = [];
  for (var i = 0; i < array2d.length; i++)
  {
    row = array2d[i];
    if(array2d[i].length < w)
    {
      for (var ii = array2d[i].length; ii < w; ii++)
      {
        row.push('');        
      }  
    }
    res.push(row);
  }
  return res;
}

示例用法:

function test_get_email() {
  var q = 'Test_table_to_sheets';
  var array2d = getEmails_(q);  
  var sheet = SpreadsheetApp.openById('1BKkd5LwBYyGoi2um-S3pTCBKrUEko34m9vJu94K8uOQ').getSheetByName('Test_table_to_sheets2');
  appendData_(sheet, convert2ArrayToRectangular_(array2d));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM