ファイルの内容を操作したりデータ変換をする
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メソッドを使うんでしたね。
流れは次のような形です。
前提として、あらかじめ「test.jpg」というファイルがマイドライブの「ひらちnの部屋」フォルダに格納されているとします。
- 保存先のGoogle Driveフォルダを取得(folder)
- ターゲットのファイル(今回は画像ファイル)を取得(file)
- getBobメソッドでBlobオブジェクトとして取得(blob1)
- blob1の名前をログに書き出し
- folderにblob1をファイルとして作成
- getAsメソッドでBMP形式としてBlobオブジェクトを取得(blob2)
- blob2の名前をログに書き出し
- 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) |
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ファイルへの変換などは、他の方法で出来ますので、またどこかで紹介させていただきます!
コメント