質問するログイン新規登録
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1079閲覧

gasでgmailからzipファイルとgzipファイルを解凍したうえで、ダウンロードしたい

pawapuro

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

2クリップ

投稿2024/02/07 08:57

0

2

実現したいこと

GASを使って、gmailに添付されているzipファイルとgzipファイルを解凍したうえで、googledriveにダウンロードしたいです。

前提

以上のことを実現したく、試行錯誤したものの、うまくいきません。
どなたかご助言お願いいたします。

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

エラー TypeError: unGzippedfiles.forEach is not a function (匿名) @ 無題.gs:48 (匿名) @ 無題.gs:29 (匿名) @ 無題.gs:22 downloads1 @ 無題.gs:16

該当のソースコード

GAS

1// gmailから添付ファイルのダウンロード、ドライブに保存 2function downloads1() { 3 4 var unzipFile; 5 6 //添付ファイルを保存するフォルダを取得 7 var folder = DriveApp.getFolderById("1TAqWCnb8c5M_kgVos5dUmroCailqVLEE"); 8 9 //検索クエリを生成 10 var query = "is:unread Report Newer_than:1m"; 11 12 //検索queryに一致するスレッドを取得 13 var threads = GmailApp.search(query); 14 15 //各スレッド情報を取得 16 threads.forEach(function (thread) {       //16行目 17 18 //スレッド内の全てのメッセージを取得 19 var messages = thread.getMessages(); 20 21 //各メッセージ情報を取得 22 messages.forEach(function (message) {     //22 23 24 //メッセージ内の全ての添付ファイルを取得 25 var attachments = message.getAttachments(); 26 27 let date = Utilities.formatDate(message.getDate(), 'Asia/Tokyo', 'yyyyMMdd'); 28 29 attachments.forEach(function (attachment) { //29 30 31 // zipとgzipの解凍 32 if (attachment.getName().endsWith("zip")) { 33 34 let unzipFiles = Utilities.unzip(attachment.setContentType('application/zip')); 35 36 unzipFiles.forEach(function (unzipFile) { 37 let fileName = date + '_' + unzipFile.getName(); 38 39 unzipFile.setName(fileName); 40 41 //添付ファイルを指定フォルダに格納 42 folder.createFile(unzipFile); 43 44 }); 45 } else { 46 let unGzippedfiles = Utilities.ungzip(attachment.setContentType('application/x-gzip')); 47 48 unGzippedfiles.forEach(function (unGzippedfile) { //48 49 let fileName = date + '_' + unGzippedfile.getName(); 50 51 unGzippedfile.setName(fileName); 52 53 //添付ファイルを指定フォルダに格納 54 var contentType = "text/tsv"; 55 var charSet = "UTF8"; 56 57 var blobFile = Utilities.newBlob("", contentType, fileName).setDataFromString(unGzippedfile.getDataAsString(), charSet); 58 folder.createFile(blobFile); 59 60 }); 61 } 62 }); 63 }); 64 }); 65}

試したこと

zipファイルのみの解凍は実現しましたが、gzipファイルの解凍が実現できていないので、以下のサイトを参考にいろいろといじりました。
https://qiita.com/uca/items/8a5af72eec087b125fd6

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

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2024/02/07 09:12

.ungzipの戻り値は、配列ではないと思いますので、配列を扱うforEachは必要ありません。
pawapuro

2024/02/07 12:00

ご連絡ありがとうございます。いただいた助言を基にもう少し試行錯誤してみます!
guest

回答1

0

ベストアンサー

.ungzipメソッドの戻り値は配列ではありませんので、
そのまま処理をすれば良いと思います。
私のところでは、下記のコードで解凍されたファイルが保存されます。

JavaScript

1 } else { 2 let unGzippedfile = Utilities.ungzip(attachment.setContentType('application/x-gzip')); 3 4 let fileName = date + '_' + unGzippedfile.getName(); 5 6 unGzippedfile.setName(fileName); 7 // //添付ファイルを指定フォルダに格納 8 // var contentType = "text/tsv"; 9 // var charSet = "UTF8"; 10 11 // var blobFile = Utilities.newBlob("", contentType, fileName).setDataFromString(unGzippedfile.getDataAsString(), charSet); 12 // folder.createFile(blobFile); 13 14 //添付ファイルを指定フォルダに格納 15 folder.createFile(unGzippedfile); 16 }

投稿2024/02/07 10:35

YellowGreen

総合スコア868

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pawapuro

2024/02/07 12:05

回答ありがとうございます!!!! 試したところ問題が解決しました!! 本当にありがとうございました!!! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問