2016-04-26 3 views
1

Ich erhalte eine E-Mail mit einem Hyperlink, der beim Klicken den Download einer CSV-Datei in mein Google Mail-Konto startet. Es ist kein echter Anhang. Als ich diese E-Mail erhalten (die eine eindeutige Betreffzeile hat), muss ich einen Weg, um automatisch den Inhalt der heruntergeladenen CSVWie kann ich automatisch eine .csv-Datei von einem Hyperlink in einer GMAIL-Nachricht herunterladen und ihren Inhalt einer Google-Tabelle hinzufügen

-Trigger hinzufügen: Eine E-Mail mit einem bestimmten Betreff-Zeile wird mein Google Mail-Konto empfangen

Aktion 1: eine CSV-Datei im Körper der E-Mail von einem Hyper-Link herunterladen

Aktion 2: den Inhalt der CSV-Datei hinzufügen zu einer Google-Tabelle Datei

ich brauche schon ein gebaut Dienst, der dies tut oder Vorschläge wie man es angehen kann.

Wenn ich dieses Google-Skript ausführen kann, sollte ich in der Lage sein, eine funktionierende Lösung zu finden. Das Problem ist, dass das Skript mir immer wieder Fehler gibt.

function downloadFile(fileURL,folder) { 

    var fileName = ""; 
    var fileSize = 0; 

    var response = UrlFetchApp.fetch(fileURL, {muteHttpExceptions: true}); 
    var rc = response.getResponseCode(); 

    if (rc == 200) { 
    var fileBlob = response.getBlob() 
    var folder = DocsList.getFolder(folder); 
    if (folder != null) { 
     var file = folder.createFile(fileBlob); 
     fileName = file.getName(); 
     fileSize = file.getSize(); 
    } 
    } 

    var fileInfo = { "rc":rc, "fileName":fileName, "fileSize":fileSize }; 
    return fileInfo; 
} 
+0

I mit einer Zapier Integration versucht verbinden, aber die Die bereitgestellten Lösungen sind nicht ausreichend. Es gibt ein paar Skripte, die dies mit einem tatsächlichen Anhang versuchen, aber ich habe damit zu kämpfen, dass dies ein Hyperlink-Download ist. Ich denke, das sollte eigentlich einfacher sein, aber ich liege wahrscheinlich falsch. –

+0

Ich habe auch die Anleitung hier ohne Glück versucht: https://ctrlq.org/code/20053-save-gmail-to-google-spreadsheet –

+0

@PaulJump Warum haben Sie diese Antwort nicht akzeptiert? Reicht das für dich aus? –

Antwort

1

Dies ist etwas, das ich vor kurzem bei der Arbeit in Angriff genommen, vollständig zu automatisieren Daten in eine Datenbank von meinen E-Mail ziehen. Ich werde keine Lösung für Sie schreiben, aber ich werde Ihnen die Informationen und Links zur Verfügung stellen, die Sie benötigen, um es selbst zu tun.

Hinweis: Ihre Frage ist sehr weit gefasst und deckt eine große Bandbreite verschiedener Probleme ab, von denen jedes einzeln mit einer eigenen Frage behandelt werden sollte (viele davon haben bereits mehrere Antworten auf StackOverflow). Dies ist ein Prozess mit verknüpfter Dokumentation und ein paar Code-Schnipsel, so dass Sie es selbst tun und jedes Problem auf dem Weg angehen können.

Das vorgeschlagene Verfahren:

  1. Öffnen Sie die E-Mail mit dem GmailApp Service
  2. über das Skript den Link Auszug unten
  3. Holen Sie sich das CSV von der Verbindung über den Code unten verlinkt. Dies nutzt UrlFetchAp, die Blob Datentyp, und das parseCsv Dienstprogramm (die Sie Kommas zuerst entkommen müssen, weil es Buggy ist)
  4. Ändern Sie den Inhalt des resultierenden Array nach Ihren Wünschen
  5. Verwenden SpreadsheetApp Service eine Tabelle zu öffnen und erhalten Bereich
  6. Legen Sie die Werte dieses Bereichs für das Datenfeld fest.

Extract href Link von E-Mail (annimmt nur 1 Link):

//Retrieves a URL from a HTML string from an href. Only applicable if there is only one link in the string 
function GetHrefURLsFromString(string){ 
    var href = string.match(/href="([^"]*)/)[1]; 
    if(href){ 
    return href; 
    } else { 
    throw "No URL Found" 
    } 
} 

Extract CSV von Link:

//Gets a CSV from a provided link, and parses it. 
function GetCSVFromLink(link){ 
    var urlData = UrlFetchApp.fetch(link); 
    if(urlData.getBlob().getContentType() == 'csv'){ 
    var stringData = urlData.getContentText(); 
    var escapedStringData = stringData.replace(/(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]\r\n(?:\\[\s\S][^'\\]\r\n)*')/g, '\r\n'); 
    var CSV = Utilities.parseCsv(escapedStringData); 
    return CSV;  
    } 
    Logger.log('DataType Not CSV') 
    return null; 
}