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

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

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

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

Q&A

解決済

1回答

4359閲覧

取得したファイルオブジェクトからGoogleドキュメントか判別してテキストを読み込む

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/15 18:45

前提・実現したいこと

Googleドライブにおいて、取得したfileオブジェクトから、そのファイルがGoogleドキュメントかどうかを判定して、
Googleドキュメントだった場合にその中身をテキストとして読み込むにはどういった処理にすればよいでしょうか?
ご教示お願いします。

試したこと

GoogleドキュメントのURLから、Googleドキュメントを取得して中身のテキストを読み込むには、
以下のコードで実装できることは理解できています。

GAS

1const url = 'GoogleドキュメントのURL'; 2const doc = DocumentApp.openByUrl(url); 3console.log(doc.getName()); 4console.log(doc.getBody().getText());

しかし、指定したファイル名からファイルオブジェクトを取得して、
それがGoogleドキュメントかどうかを判定して、中身をテキストとして読み込むにはどのようにすればよいでしょうか?

以下のように実装してみましたが、指定したファイルが単なるテキストファイルの場合、
これで中身のテキストを読み込めることは確認できたのですが、

GAS

1 let file = DriveApp.getFilesByName("test").next(); 2 let content = file.getBlob().getDataAsString("utf-8"); 3 console.log(content);

指定したファイルがGoogleドキュメントだった場合、以下のようなログとなり、正常に読み込めませんでした。

%PDF-1.4 %���� 1 0 obj <</Title <FEFF30C630B930C830C930AD30E530E130F330C8> /Producer (Skia/PDF m92 Google Docs Renderer)>> endobj 3 0 obj <</ca 1 /BM /Normal>> endobj 6 0 obj <</Filter /FlateDecode /Length 326>> stream x����j�0 E��~L�dɒa ڱ�9#��� �u�s� �e�E��*W�P��˘���}�>#Y@�����{����p`�����xZ���o�b��k����b/�qm���� rb�٪��_un�m��?껍�� �fC��w;��"�j�h�{�w!���w�8 AˡJ�b����^��

ファイルオブジェクトのリファレンスを見ても、
特にGoogleドキュメントとして読み込むようなメソッドが見つからなかったです。
また、指定したファイルがGoogleドキュメントかどうかを判定する方法についてですが、
以下のようなメソッドを試したところ、Googleドキュメントの場合でも何故かfalseが返ってきてしまいました。
また、Googleスプレッドシートでも同様にfalseが返ってきてしまいました。

GAS

1 let file = DriveApp.getFilesByName("test").next(); 2 console.log(file.getBlob().isGoogleType());

リファレンスは以下のように書かれていました。

isGoogleType() Returns whether this blob is a Google Workspace file (Sheets, Docs, etc.). Return Boolean — true if this blob is a Google Workspace file; false if not.

やりたいこととしては、ファイル名を指定してファイルオブジェクトを取得し、そのテキストを読み込むことなのですが、
読み込みたい対象のファイルは、テキストファイル、もしくはGoogleドキュメントにしたいので、
ファイルオブジェクトを取得した後、Googleドキュメントかどうかを判別して、読み込む処理を分けたいと考えています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイルの種類(MimeType)は、File.getMimeType()を呼ぶことで判断出来ます。

  • Document の場合は application/vnd.google-apps.document
  • テキストファイルの場合は text/plain

になります。その他の Google Workspace の Mime Type は以下に一覧が載っています。

Google Workspace and Drive MIME Types
https://developers.google.com/drive/api/v3/mime-types

あとはそのファイルの ID を DocumentApp.openById() で開けば、Documentオブジェクトが取得出来ます。

JavaScript

1const file = DriveApp.getFilesByName("test").next(); 2const mimeType = file.getMimeType(); 3 4if (mimeType === "application/vnd.google-apps.document") { 5 const doc = DocumentApp.openById(file.getId()); 6 const content = doc.getBody().getText(); 7 console.log(content); 8} 9else if (mimeType === "text/plain") { 10 const content = file.getBlob().getDataAsString(); 11 console.log(content); 12}

投稿2021/05/15 20:52

draq

総合スコア2577

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

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

退会済みユーザー

退会済みユーザー

2021/05/16 07:19

ご回答ありがとうございます。 File.getMimeTypeメソッドからMimeTypeで判別できるのですね。 ご提示いただいたコードで確認致しました。 ご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問