POIでEXCELの画像をファイルに保存(エクスポート)

2019年3月7日木曜日

Java POI

t f B! P L

POIでEXCELの画像をファイルに保存(エクスポート)

Apache POIを使って、Excelファイルに保存されている画像を、ファイルに保存(エクスポート)する方法を紹介します。

はじめに

サンプルコードの実装イメージです。
タイトルの通りですが、EXCELブックに張り付けられている全ての画像を、指定したディレクトリに保存(エクスポート)するコードになっています。

サンプルコードの実装イメージ
↑ 実装イメージ

サンプルコード

早速、サンプルコードです。

//EXCELブックを開く
FileInputStream in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
int cnt = 1;

//対象EXCELブックの画像の数だけ繰り返し
for (HSSFPictureData pic : wb.getAllPictures()) {

 //画像の保存先
 String savePath = String.format("c:\\temp\\%d.%s", cnt++, pic.suggestFileExtension());

 //EXCELの画像データをByte[]配列で取得
 byte[] data = pic.getData();

 //画像データをファイルに書き出す
 FileOutputStream out = new FileOutputStream(savePath);
 out.write(data);
 out.close();
}

サンプルは、HSSFクラス(.xlsを扱うクラス)でのサンプルですが、.xlsxに対応する場合は、HSSF の部分を、XSSF に変えればOKです。

補足

コードを見てもらえれば、大体分かると思いますが、紹介したコードの特記すべき点について、補足します

画像のフォーマット(拡張子)を取得する

ファイルを作成する際、画像のフォーマットに合わせてjpg/pngなどの拡張子を付ける必要があります。
POIでは、HSSFPictureData#suggestFileExtension()で画像フォーマットに対応する拡張子を返してくれます。

さいごに

今回紹介したコードを使えば、「Excelに張り付けた、画像の元データを紛失してしまった!!」といった場合に、画像ファイルの復元として使えそうです。

スポンサーリンク

QooQ