【GAS GoogleAppsScript | ファイル・データ操作】Blobオブジェクト

スポンサーリンク

ファイルの内容を操作したりデータ変換をする

BlobクラスとBlobSource

まず、Blob型(binary large object) とは、ファイル名と MIME 型の指定がついた万能なデータ型のことで「ファイル名と拡張子が付いたファイルみたいなもの」です。テキストや画像など色々なデータをバイナリデータとして保持するので、そこから別のデータに変換したりなど便利な使い方で出来ます。

その、Blob型のデータを取り扱う機能が揃っているのが、Blobクラスと言うわけです。

公式ドキュメントには、「AppsScriptサービスのデータ交換オブジェクト」と説明されています。

Blobクラスの主なメンバー

メンバー 戻り値 説明
copyBlob() Blob blobのコピーを返す
getAs(contentType) Blob 指定されたコンテンツタイプに変換したblobを返す
getBytes() Byte[] blobに格納されているデータを取得する
getContentType() String blobのコンテンツタイプを取得する
getDataAsString() String blobのデータをUTF-8エンコーディングの文字列として取得する
getDataAsString(charset) String blobのデータを、指定されたエンコーディング(charset)の文字列として取得する
getName() String blobの名前を取得する
isGoogleType() Boolean blobがGoogleWorkspaceファイル(スプレッドシート、ドキュメントなど)であるかどうかを返す
setBytes(data) Blob blobの格納されているデータを設定する
setContentType(contentType) Blob blobのコンテンツタイプを設定する
setContentTypeFromExtension() Blob ファイル拡張子に基づいて、blobのコンテンツタイプを設定する
setDataFromString(string) Blob UTF-8エンコーディングの文字列をblobのデータとして設定する
setDataFromString(string, charset) Blob 指定されたエンコーディング(charset)の文字列をblobのデータとして設定する
setName(name) Blob blobの名前を設定する

という感じなんですが、あんまりイメージつかないですよね。

もう少しイメージつきやすいものとして、BlobSourceというものがあります。

BlobSourceというのは、GASで提供されているクラスのオブジェクトのうちBlobオブジェクトとして取得および操作ができるもののことを言います。

次のようなクラスです。

クラス 説明
Document ドキュメント
EmbeddedChart スプレッドシートの埋め込みグラフ
File Googleドライブのファイル
GmailAttachment Gmailの添付ファイル
HTTPResponse HTTPレスポンス
InlineImage 埋め込み画像
Spreadsheet スプレッドシート

これらのオブジェクトはBlobSourceオブジェクトとよばれています。

お馴染みの名前が出てくるのでイメージしやすいですね(^^)

これらのオブジェクトは、次のメソッドでBlobオブジェクトとして取得することが出来ます。

メンバー 戻り値 説明
getAs(contentType) Blob 指定されたコンテンツタイプに変換したblobを返す
getBlob() Blob オブジェクトをblobとして返す

Blobオブジェクトの取得と変換

それでは、実際にBlobオブジェクトを取得してみましょう!

GASでBlobオブジェクトを取得するには、BlobSourceオブジェクトのgetAsメソッドかgetBlobメソッドを使うんでしたね。

構文

BlobSourceオブジェクト.getAs(contentType)

構文

BlobSourceオブジェクト.getBlob()

流れは次のような形です。

前提として、あらかじめ「test.jpg」というファイルがマイドライブの「ひらちnの部屋」フォルダに格納されているとします。

  1. 保存先のGoogle Driveフォルダを取得(folder)
  2. ターゲットのファイル(今回は画像ファイル)を取得(file)
  3. getBobメソッドでBlobオブジェクトとして取得(blob1)
  4. blob1の名前をログに書き出し
  5. folderにblob1をファイルとして作成
  6. getAsメソッドでBMP形式としてBlobオブジェクトを取得(blob2)
  7. blob2の名前をログに書き出し
  8. folderにblob2をファイルとして作成
function test(){

  // 1.保存先のGoogle Driveフォルダを取得(folder)
  var folder = DriveApp.getFolderById("**ひらちんの部屋フォルダのID**") // ひらちんの部屋フォルダ
  
  // 2.ターゲットのファイル(今回は画像ファイル)を取得(file)
  var file = DriveApp.getFileById("**test.jpgのID**") // test.jpgファイル
  
  // 3.getBobメソッドでBlobオブジェクトとして取得(blob1)
  var blob1 = file.getBlob()
  
  // 4.blob1の名前をログに書き出し
  Logger.log(blob1.getName()) // test.jpg
  
  // 5.folderにblob1をファイルとして作成
  folder.createFile(blob1)
  
  // 6.getAsメソッドでBMP形式としてBlobオブジェクトを取得(blob2)
  var blob2 = file.getAs(MimeType.BMP)
  
  // 7.blob2の名前をログに書き出し
  Logger.log(blob2.getName()) //test.bmp
  
  // 8.folderにblob2をファイルとして作成
  folder.createFile(blob2)

}

実行するとログには、4で「test.jpg」、7で「test.bmp」が書き出されます。4では3でgetBlobメソッドでそのままBlobオブジェクトにしているのに対し、7は、6でgetAsメソッドでBMPファイルとして取得しているため、7の書き出しの拡張子がbmpになっています、

5、8ではフォルダーに実際にファイルを書き出していますが、8では、Blobオブジェクトのコンテンツ形式にBMPが設定されていたので、下の図のように1つはbmpファイルになっていることが分かります。

ちなみに、設定できるコンテンツタイプは以下のようになっています。

プロパティ タイプ 説明
GOOGLE_APPS_SCRIPT Enum Google AppsScriptプロジェクト
GOOGLE_DRAWINGS Enum Google図形描画ファイル
GOOGLE_DOCS Enum Googleドキュメントファイル
GOOGLE_FORMS Enum Googleフォームファイル
GOOGLE_SHEETS Enum Googleスプレッドシートファイル
GOOGLE_SITES Enum Googleサイトファイル
GOOGLE_SLIDES Enum Googleスライドファイル
FOLDER Enum Googleドライブフォルダ
SHORTCUT Enum Googleドライブショートカット
BMP Enum BMPイメージファイル(.bmp)
GIF Enum GIF画像ファイル(.gif)
JPEG Enum JPEG画像ファイル(.jpg)
PNG Enum PNG画像ファイル(.png)
SVG Enum SVG画像ファイル(.svg)
PDF Enum PDFファイル(.pdf)
CSS Enum CSSテキストファイル(.css)
CSV Enum CSVテキストファイル(.csv)
HTML Enum HTMLテキストファイル(.html)
JAVASCRIPT Enum JavaScriptテキストファイル(.js)
PLAIN_TEXT Enum プレーンテキストファイル(.txt)
RTF Enum リッチテキストファイル(.rtf)
OPENDOCUMENT_GRAPHICS Enum OpenDocumentグラフィックファイル(.odg)
OPENDOCUMENT_PRESENTATION Enum OpenDocumentプレゼンテーションファイル(.odp)
OPENDOCUMENT_SPREADSHEET Enum OpenDocumentスプレッドシートファイル(.ods)
OPENDOCUMENT_TEXT Enum OpenDocumentワードプロセッシングファイル(.odt)
MICROSOFT_EXCEL Enum Microsoft Excelスプレッドシートファイル(.xlsx)
MICROSOFT_EXCEL_LEGACY Enum Microsoft Excelレガシーファイル(.xls)
MICROSOFT_POWERPOINT Enum Microsoft PowerPointプレゼンテーションファイル(.pptx)
MICROSOFT_POWERPOINT_LEGACY Enum Microsoft PowerPointレガシーファイル(.ppt)
MICROSOFT_WORD Enum Microsoft Wordドキュメントファイル(.docx)
MICROSOFT_WORD_LEGACY Enum Microsoft Wordレガシーファイル(.doc)
ZIP Enum ZIPアーカイブファイル(.zip)

ただし、全ての形式に変換できるわけでは無いので注意してください。

実は、スプレッドシートの変換先をEXCELにすることは出来ません。。。

スプレッドシートやドキュメントの変換先のコンテンツファイルはPDFになります。

まとめ

Blobクラス・BlobSourceについて説明しました。ちなみに、スプレッドシートからCSVファイルへの変換などは、他の方法で出来ますので、またどこかで紹介させていただきます!