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

2021年6月1日火曜日

Java POI

t f B! P L

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