【GAS】Gmailの内容をスプレッドシート転記後、マイドライブにエクセル形式で保存したい

実現したいこと

Gmailの内容をスプレッドシート転記後、マイドライブにエクセル形式で保存したいです

前提

GASを利用して特定のメールアドレスから送られてきたメールの内容を要素に分けてスプレッドシートに転記し、すべての転記が完了後、エクセル形式でマイドライブの特定フォルダへ保存させたいです

発生している問題・エラーメッセージ

エラーは発生していないのですが、メールの内容が記載される前にエクセルで保存されてしまっている

該当のソースコード

GoogleAppScript

1function myFunction() { 2 //検索条件に該当するスレッド一覧を取得 3 const query = 'from:test@example.co.jp -label:処理済み'; 4 const start = 0; 5 const max = 15; 6 7 const threads = GmailApp.search(query, start, max); 8 const messagesForThreads = GmailApp.getMessagesForThreads(threads); 9 10 const values = []; 11 const sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); 12 const lastRow = sheet.getLastRow(); 13 const sheetr = SpreadsheetApp.getActive().getSheetByName('シート2'); 14 const lastRowr = sheetr.getLastRow(); 15 const ids = sheetr.getRange(2, 2, lastRowr).getValues().flat(); 16 17 18 // スレッドを一つずつ取り出す 19 threads.forEach(function(thread) { 20 21 // スレッド内のメール一覧を取得 22 var messages = thread.getMessages(); 23 24 // メールを一つずつ取り出す 25 messages.forEach(function(message) { 26 27 var id = message.getId(); 28 29 if(!ids.includes(id)){ 30 31 // メール本文を取得 32 var plainBody = message.getPlainBody(); 33 34 // Forwarded message判定 35 var ForwardMG = plainBody.match(/Forwarded message[\s\S]*?From:/); 36 37 // 【シナリオ】 38 var Scenario = plainBody.match(/【シナリオ】[\s\S]*?(/g); 39 if(Scenario != null){ 40 var First01 = Scenario[0].lastIndexOf('】'); 41 First01 = First01 +=1 42 var Last01 = Scenario[0].lastIndexOf('('); 43 Last01 = Last01 -=First01 44 Scenario = Scenario[0].substr(First01,Last01); 45 Scenario = Scenario.trim(); 46 } 47 48 //時間 49 var Intime = plainBody.match(/【時間】[\s\S]*?【/); 50 Intime = Intime[0].substr( 7, 20 ); 51 Intime = "'" + Intime.trim(); 52 var Check01 = Intime.substr( 1, 1 ); 53 54 var record = [ 55 Intime, 56 id, 57 Scenario 58 ]; 59 } 60 61 if(ForwardMG == null){ 62 63 values.push(record); 64 65 } 66 67 // スレッドに処理済みラベルを付ける 68 var label = GmailApp.getUserLabelByName('処理済み'); 69 threads.forEach(threads => threads.addLabel(label)); 70 } 71 }); 72 }); 73 74 if(values.length > 0){ 75 sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values); 76 sheetr.getRange(lastRowr + 1, 1, values.length, values[0].length).setValues(values); 77 78 //メール一覧シートをエクセル変換してマイドライブに保存 79 var ss = SpreadsheetApp.getActive(); 80 var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx"; 81 82 83 var params = { 84 method : "get", 85 headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}, 86 muteHttpExceptions: true 87 }; 88 89 var blob = UrlFetchApp.fetch(url, params).getBlob(); 90 91 var folderID = "指定のフォルダID"; 92 93 var folder = DriveApp.getFolderById(folderID); 94 95 var file = folder.createFile(blob); 96 97 var fileName = "test" + ".xlsx"; 98 99 file.setName(fileName); 100 } 101 102}

試したこと

メール内容取得・転記とエクセル保存を別プロジェクトにして第三のプロジェクトから双方を呼び出す形式にしてみましたが、結果は変わらずでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント