Gmail samenvoegen met Google Sheet

In dit artikel komt aan de orde hoe een Google Sheet automatisch kan worden samengevoegd met informatie uit een Gmail via Apps Script.

Een voorwaarde is dat de e-mail de onderstaande HTML-tabel structuur kent: meerdere rijen en twee kolommen.

<table>
        <tr>
                <td width="25%">
                        <p><b>Locatie</b>
                        </p>
                </td>
                <td>
                        <p>Amsterdam
                        </p>
                </td>
        </tr>
</table>

Het onderstaande script scant alle e-mails die gelabeld zijn met "MijnLabel" en zoekt - in dit voorbeeld - de Locatie in de tabel en plaatst het bijbehorende resultaat (Amsterdam) in cel A1.

function extractDataFromEmail() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var label = GmailApp.getUserLabelByName("MijnLabel");

  if (label) {
    var threads = label.getThreads();

    for (var i = 0; i < threads.length; i++) {
      var messages = threads[i].getMessages();
      for (var j = 0; j < messages.length; j++) {
        var message = messages[j];
        var htmlBody = message.getBody();
        
        var naamValue = extractValueFromHtml(htmlBody, "Locatie");
        if (naamValue) {
          sheet.getRange("A1").setValue(naamValue);
        }
      }
    }
  } else {
    Logger.log("Label niet gevonden");
  }
}

function extractValueFromHtml(html, label) {
  var lines = html.split('\n');
  var extractingValue = false;

  for (var k = 0; k < lines.length; k++) {
    if (lines[k].indexOf('<p><b>' + label + '</b>') !== -1) {
      extractingValue = true;
      continue;
    }

    if (extractingValue && lines[k].trim().startsWith('<p>')) {
      return lines[k].trim().replace(/<\/?p>/g, '');
    }
  }
  return null; 
}

Vooralsnog werkt dit script voor één enkele e-mail, voor de toekomst zal dit artikel wellicht worden aangepast voor bulk-verwerking.