質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1757閲覧

【GAS】Googleドライブ内のファイルのIDの取得ができない

reeeiimi

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/11/05 08:13

編集2019/11/05 08:24

前提・実現したいこと

GASを利用してGmailから特定のメールをスプレッドシートにリストアップしたいです。
項目は「件名、送信元、宛先、本文、添付ファイル」
添付がある場合は添付ファイルをドライブにダウンロード(ファイルを作成)→作成されたファイルのIDを取得→ハイパーリンクを作成してリスト化して、ハイパーリンクにより添付ファイルの場所に飛べるようにしたいです。

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

添付ファイルをドライブ内に作成後、ファイルIDの取得ができません。
ファイル自体は存在しているのに、getId()ができておらず、エラーメッセージはないが
取得結果がUndefinedとなります。

該当のソースコード

GoogleAppsScript

1// 設定情報 2function getConfig() { 3 return { 4 ssId: '',// スプレッドシートの ID 5 ssName: 'シート1',// スプレッドシートのタブ名 6 query: '検索ワード after:2019/8/31', 7 folderId: '' // ドライブのフォルダ(念のため共有もつけている) 8 }; 9} 10 11// 添付ファイルを保存 12function fetchFile(folderId, message) { 13 var folder = DriveApp.getFolderById(folderId); 14 var attachments = message.getAttachments(); 15 var obj = {}; 16 attachments.forEach(function (att){ 17 obj[att.getName()] = folder.createFile(att).getId(); 18 }); 19 return obj 20} 21 22// 実行関数 23function main() { 24 var config = getConfig(); 25 var sheet = SpreadsheetApp.openById(config.ssId) 26 .getSheetByName(config.ssName); 27 var messages = [['Subject', 'From', 'To', 'Content', 'Attachment']]; 28 29 GmailApp 30 .search(config.query) 31 .forEach(function (thread) { 32 thread.getMessages().forEach(function (message) { 33 var subject = message.getSubject(); 34 var to = message.getTo(); 35 var from = message.getFrom(); 36 var content = message.getPlainBody(); 37 var attachment = fetchFile(config.folderId, message); 38 39 var links = []; 40 if(attachment) { 41 var attName = Object.keys(attachment); 42 attName.forEach(function(a) { 43 links.push('=HYPERLINK(\"https://drive.google.com/uc?id=' + attName.a + '\",\"' + a + '\")'); 44 }); 45 } 46 else{ 47 links.push(''); 48 } 49 messages.push([subject, from, to, content].concat(links)); 50 }); 51 }); 52 53 if (messages.length === 0) { 54 return; 55 } 56 sheet.getRange('A1:E' + messages.length ).setValues(messages); 57}

試したこと

念のため、ドライブのフォルダの共有設定を「リンクを知っている人が全員編集可」としました。
複数のファイル形式で試したが、すべてNG。
ファイルのアップロードが完了するのを待つためにSleepを10秒いれてみたが変化なし。

補足情報

添付ファイルの個数は複数の場合もあるが今回はひとまず一件のみとしています。

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

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

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

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

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

Y.H.

2019/11/05 08:27

> 取得結果がUndefinedとなります これは質問記載のコードのどこで確認されましたか?
guest

回答1

0

ベストアンサー

JavaScript

1links.push('=HYPERLINK(\"https://drive.google.com/uc?id=' + attName.a + '\",\"' + a + '\")');

attNamefetchFile()の戻り値で、attachmentの名前の配列ですよね。
attName.aではなくattachment[a]じゃないでしょうか?

投稿2019/11/05 08:37

編集2019/11/05 08:52
Y.H.

総合スコア7914

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

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

reeeiimi

2019/11/05 08:42

回答ありがとうございます。 どちらも試してみましたが、同じ結果となりました。 attNameはオブジェクトのため、「attName.a」と「attName[a]」、どちらの書き方でも問題ないと認識しているのですが…。
reeeiimi

2019/11/05 08:44

失礼いたしました、attNameはオブジェクトではありませんでした。。。 attachment[a]としたところ、期待通りに動きました!ありがとうございます!
Y.H.

2019/11/05 08:51

あぁこめんなさい。 attName[a] ⇒ attachment[a] 欲しいのはfetchFile()の戻り値のattachmentに入っている値ですよね?
Y.H.

2019/11/05 08:51

かぶりました :-)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問