0

J'ai donc construit une feuille de calcul qui obtient 2 rapports de 2 sources différentes, puis les importe dans la feuille. Un des rapports est un fichier CSV qui est envoyé à mon email toutes les heures.en utilisant Google Script pour obtenir la pièce jointe de Gmail

Le script que j'ai fonctionne ... surtout. Il va vérifier mon email pour le fil, tirez le message, puis importez la pièce jointe à la feuille. Le problème est que lorsque l'email suivant est reçu l'heure suivante et que le script s'exécute à nouveau, il ne tire pas la pièce jointe la plus récente, il ne tire que le premier. J'ai même essayé de déplacer le message dans ma corbeille à chaque fois qu'il fonctionne, mais il va quand même le sortir de la poubelle. Voici mon code.

function importReport() { 

    var threads = GmailApp.search('in:inbox from:"[email protected]"'); 
    var message = threads[0].getMessages()[0]; 
    var attachment = message.getAttachments()[0]; 
    attachment.setContentType('text/csv'); 

// Is the attachment a CSV file 
if (attachment.getContentType() === "text/csv") { 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RawReport"); 
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ","); 

    // Remember to clear the content of the sheet before importing new data 
    sheet.clearContents().clearFormats(); 
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData); 

GmailApp.moveMessageToTrash(message); 
    } 


} 

L'objectif est de tirer tout le fil, puis importer la pièce jointe la plus récente, un conseil?

Répondre

1

Vous devriez essayer d'extraire le dernier message du thread Gmail au lieu du premier message.

var messages = threads[0].getMessages(); 
var message = messages[messages.length - 1]; 
+0

Ceci l'a corrigé! Merci beaucoup! –

0

Ainsi, grâce à l'utilisateur @AmitAgarwal, le correctif était le suivant.

//download the thread with all the attachments (they will build up over time) 
    var message = threads[0].getMessages(); 
    //Get the most recent attachment 
    var attachment = message[message.length - 1].getAttachments()[0]; 

Ceci va télécharger le fil complet et obtenir la pièce jointe la plus récente.

Une autre solution que j'ai trouvée est d'inverser la matrice après l'avoir tirée.

var message = threads[0].getMessages(); 
message.reverse(); 
var attachment = message[0].getAttachments()[0];