0

2つの異なるソースから2つのレポートを取得してシートにインポートするスプレッドシートを作成しました。レポートの1つは、1時間ごとにメールに送信されるCSVファイルです。Google Scriptを使用してGmailから添付ファイルを取得する

私が使っているスクリプトはほとんどです。スレッドのメールを確認し、メッセージを取り出して添付ファイルをシートにインポートします。問題は、次のメールが次の1時間に受信され、スクリプトが再び実行され、最新の添付ファイルが取得されず、最初のメールのみがプルされるときです。私はそれが実行されるたびにメッセージを自分のゴミ箱に移動しようとしましたが、それでもゴミ箱から引き出します。ここに私のコードです。

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); 
    } 


} 

これは、スレッド全体をプルして最新の添付ファイル、アドバイスをインポートすることを目的としていますか?

答えて

1

最初のメッセージではなく、Gmailスレッドから最後のメッセージをプルしようとする必要があります。

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

これを修正しました。ありがとう、トン! –

0

ユーザー@AmitAgarwalのおかげで、以下のように修正されました。

//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]; 

これはスレッド全体をダウンロードし、最新の添付ファイルを取得します。

私がやってきた別の解決策は、あなたがそれを引いた後に配列を逆にすることです。

var message = threads[0].getMessages(); 
message.reverse(); 
var attachment = message[0].getAttachments()[0]; 
関連する問題