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

スポンサーリンク

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

BlobクラスとBlobSource

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

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

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

Blobクラスの主なメンバー

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

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

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

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

次のようなクラスです。

クラス説明
Documentドキュメント
EmbeddedChartスプレッドシートの埋め込みグラフ
FileGoogleドライブのファイル
GmailAttachmentGmailの添付ファイル
HTTPResponseHTTPレスポンス
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_SCRIPTEnumGoogle AppsScriptプロジェクト
GOOGLE_DRAWINGSEnumGoogle図形描画ファイル
GOOGLE_DOCSEnumGoogleドキュメントファイル
GOOGLE_FORMSEnumGoogleフォームファイル
GOOGLE_SHEETSEnumGoogleスプレッドシートファイル
GOOGLE_SITESEnumGoogleサイトファイル
GOOGLE_SLIDESEnumGoogleスライドファイル
FOLDEREnumGoogleドライブフォルダ
SHORTCUTEnumGoogleドライブショートカット
BMPEnumBMPイメージファイル(.bmp)
GIFEnumGIF画像ファイル(.gif)
JPEGEnumJPEG画像ファイル(.jpg)
PNGEnumPNG画像ファイル(.png)
SVGEnumSVG画像ファイル(.svg)
PDFEnumPDFファイル(.pdf)
CSSEnumCSSテキストファイル(.css)
CSVEnumCSVテキストファイル(.csv)
HTMLEnumHTMLテキストファイル(.html)
JAVASCRIPTEnumJavaScriptテキストファイル(.js)
PLAIN_TEXTEnumプレーンテキストファイル(.txt)
RTFEnumリッチテキストファイル(.rtf)
OPENDOCUMENT_GRAPHICSEnumOpenDocumentグラフィックファイル(.odg)
OPENDOCUMENT_PRESENTATIONEnumOpenDocumentプレゼンテーションファイル(.odp)
OPENDOCUMENT_SPREADSHEETEnumOpenDocumentスプレッドシートファイル(.ods)
OPENDOCUMENT_TEXTEnumOpenDocumentワードプロセッシングファイル(.odt)
MICROSOFT_EXCELEnumMicrosoft Excelスプレッドシートファイル(.xlsx)
MICROSOFT_EXCEL_LEGACYEnumMicrosoft Excelレガシーファイル(.xls)
MICROSOFT_POWERPOINTEnumMicrosoft PowerPointプレゼンテーションファイル(.pptx)
MICROSOFT_POWERPOINT_LEGACYEnumMicrosoft PowerPointレガシーファイル(.ppt)
MICROSOFT_WORDEnumMicrosoft Wordドキュメントファイル(.docx)
MICROSOFT_WORD_LEGACYEnumMicrosoft Wordレガシーファイル(.doc)
ZIPEnumZIPアーカイブファイル(.zip)

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

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

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

スポンサーリンク

まとめ

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

コメント

タイトルとURLをコピーしました