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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Q&A

解決済

1回答

7504閲覧

GASで添付ファイルをドライブに保存し、そのファイルをSpreadsheetAppで開きたい

ixeris

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2019/01/30 03:26

前提・実現したいこと

googleスプレッドシート上のGAS(Google Apps Script)で、
GMailで特定ラベルのついた受信トレイ内のファイルから添付ファイル(必ずひとつのxls、xlsxファイル)を
特定フォルダに保存しつつ、そのファイルの1行目をメッセージID、件名等とともに
このスプレッドシートに記録していきたいと考えています。
添付ファイルの保存もでき「添付ファイルの1行目」以外については実現できています。

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

添付ファイルの保存にcreateFileを使用しているため、
この際に返されるFile型オブジェクトからgetIdメソッドでIDを得ると33桁のラベルが得られますが、
このIDをSpreadsheetApp.openByIdで使っても
以下のエラーになり、EXCELファイルを開けません。

 ドキュメント(1SRujMdg5N(略))がありません。  ドキュメントが削除されたか、読み取りアクセス権が  ない可能性があります。

ID自体が違うのか、保存後にどこかでアクセス権限をつける必要があるのか分かりません。

該当のソースコード

GAS

1var id = messages[i][j].getId(); 2var frm = messages[i][j].getFrom(); 3var subj = messages[i][j].getSubject(); 4var utm = new Date().getTime(); 5var fname = subj + '_' + frm + '_' + id + '_' + utm + '_' + attachments[k].getName() 6attachments[k].setName(fname); 7 8var f = aFolder.createFile(attachments[k]); 9var fl = aFolder.getFilesByName(fname).next(); 10 11var fid = fl.getId(); 12var fid2 = f.getId(); 13var u = fl.getUrl(); 14 15var rsheetbook = SpreadsheetApp.openById(fid2);//(エラー)。 16var rsheetbook = SpreadsheetApp.open(f);//(エラー)。 17var rsheetbook = SpreadsheetApp.open(fl);//(エラー)。 18var rsheetbook = SpreadsheetApp.openById(fid);//(エラー)。 19var rsheetbook = SpreadsheetApp.openByUrl(u);//(エラー)。

試したこと

他にソースコードにある通りいくつかの方法で記述しましたが
全く同じエラーになりました。

また、上の手順で保存されたファイルを
自分でドライブを辿って「アプリで開く」→「googleスプレッドシート」で開いて
URLのID部分を見るとどれも44桁の文字の羅列になっています。
試しにこのIDをSpreadsheetApp.openByIdで使用すると、
正常に開けます。

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

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

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

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

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

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

macaron_xxx

2019/01/30 03:45

保存した時点ではEXCELファイルなので、SpreadsheetAppからは開けないんじゃないですか?
guest

回答1

0

ベストアンサー

同じエラーを再現することはできませんでしたが、原理的には「xlsxはSpreadsheetAppでは開けない」問題を克服できません
(Googleドライブ上でプレビューしたり、スプレッドシートで開くができたりするのは、そういう専用機能があるからです)

idが上手く取得できたところで無効な値(行 __、ファイル「__」)というエラーになるはずです

javascript

1var rsheetbook = SpreadsheetApp.openById(fid);//(エラー)。

↑のエラーは無効な値のはず。


追記
試してませんが、Google Apps Scriptを使ってエクセルファイルをスプレッドシートに変換するなどを参考に一旦スプレッドシートに変換のうえ、内容を読み出す処理に書きかえてみてください

投稿2019/01/30 03:44

編集2019/01/30 03:45
papinianus

総合スコア12705

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

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

ixeris

2019/01/30 03:56

うっかり普通にEXCELファイルを開けるものだと思っていました。 44桁のものが開けるのは、一旦手動で開いたことでスプレッドシートに裏で変換されているからということでしょうかね。 有益な参考サイトもありがとうございます。
papinianus

2019/01/30 03:59

> 44桁のものが開けるのは、一旦手動で開いたことでスプレッドシートに裏で変換されているからということでしょうかね そうだと思います。 「アプリで開く」→「googleスプレッドシート」のところで、多少ローディングが入りますよね?このときに変換をかけてます。かけた結果idがかわって、44桁(桁数は確認したことないですが)になる。同じことをコードで再現する必要があります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問