簡體   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