SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

最新POIでOffice Open XML形式のExcelファイルを操作

「Usermodel API」を利用したExcelの計算式・図形操作

最新POIでOffice Open XML形式のExcelファイルを操作 第3回

セルコメントと画像

 同じように「XSSFDrawing」を利用して操作できるオブジェクトに「セルコメント」や「画像」があります。セルコメントの扱いは、テキストボックスを利用するのに似ています。POIがサポートする画像の種類は現状では「PNG」「JPG」「DIB」です。

 「XSSFDrawing」を利用したパターンを習得してしまうために、Apache提供のサンプルプログラムから一部抜粋・変更したものでセルコメントと画像の操作方法も確認しましょう。

ソース5
Workbook wb = new XSSFWorkbook();
       CreationHelper createHelper = wb.getCreationHelper();
       Sheet sheet = wb.createSheet();

       Cell cell1 = sheet.createRow(3).createCell(5);
       cell1.setCellValue("F4");
	
	// (1)セルコメントオブジェクトを生成
       Drawing patriarch = sheet.createDrawingPatriarch();
       ClientAnchor anchor = createHelper.createClientAnchor();
       Comment comment = patriarch.createCellComment(anchor);

	// (2)コメント情報を設定後、セルにセルコメントオブジェクトを設定
       RichTextString message = createHelper.createRichTextString("Hello, World!");
       comment.setString(message);
       comment.setAuthor("Apach POI");
       cell1.setCellComment(comment);
  • ソース5 -(1)
  •  SSパッケージの「Drawing」インターフェースにワークシートオブジェクトから生成した「XSSFDrawing」を代入しています。SSパッケージのClientAnchorインターフェースにCreationHelperインターフェースを利用して位置情報を管理する「XSSFClientAnchor」オブジェクトを代入しています。引数なしで生成した場合、位置情報の項目はすべてデフォルト値の0になります。最後に位置情報を渡して、「XSSFDrawing」のセルコメント生成メソッドを利用してセルコメントオブジェクトが取得できます。

  • ソース5 -(2)
  •  セルコメントにコメントとコメント作者情報を設定後、セルコメントをセルに挿入しています。

ソース6
Workbook wb = new XSSFWorkbook();
       CreationHelper createHelper = wb.getCreationHelper();

	// (1)ワークブックに画像を追加
       InputStream is = new FileInputStream(args[0]);
       byte[] bytes = IOUtils.toByteArray(is);
       is.close();
       int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);

       Sheet sheet = wb.createSheet();

	// (2)指定した位置に画像を配置 
       Drawing patriarch = sheet.createDrawingPatriarch();
       ClientAnchor anchor = createHelper.createClientAnchor();
       anchor.setCol1(1);
       anchor.setRow1(1);
       Picture picture = patriarch.createPicture(anchor, pictureIdx);

       // (3)画像サイズを1.2倍に拡大
       picture.resize(1.2);

       FileOutputStream fileOut = new FileOutputStream(file);
       wb.write(fileOut);
       fileOut.close();
  • ソース6 -(1)
  •  ワークブックオブジェクトのaddPictureメソッドを利用してバイト配列に変換した画像データを、フォーマット(サンプルではPNG)の指定をしてワークブックに追加します。戻り値は追加した画像を指すインデックスで0から始まる整数です。

  • ソース6 -(2)
  •  位置情報と利用したい画像を指すインデックスを渡して、「XSSFDrawing」の画像生成メソッドを利用して画像オブジェクトが取得できます。

  • ソース6 -(3)
  •  オリジナルの画像のサイズを変更するメソッドresizeを利用しています。0.5を指定すればオリジナル画像の半分のサイズ、引数なしまたは1.0を指定すればオリジナルのサイズのままです。ただし、このメソッドが有効であるのはデフォルトのフォントサイズを利用している場合という制限があります。

 Apache POIのロゴを表示した実行結果を参考に掲載しておきます。

実行結果
実行結果

まとめ

 今回はUsermodel APIの中から名前の定義、計算式、図形と画像の利用方法を解説しました。名前の定義を利用した計算式はプログラムの可読性が上がるので積極的に利用してみてください。POIでの図形や画像の操作はHSSFコンポーネントを利用した経験がある方でも、あまりなじみがなかったかもしれません。ぜひこれを機会に試してみてください。これら以外にも紹介したかったAPIは数多くあるのですが、Usermodel APIの利用方法に焦点を当てた基礎編はここまでとします。次回はこれまでの基礎知識を土台にして、POIを利用した帳票作りに挑戦してみたいと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
最新POIでOffice Open XML形式のExcelファイルを操作連載記事一覧

もっと読む

この記事の著者

土田 将人(ツチダ マサト)

株式会社ビーブレイクシステムズにて業務システムのパッケージソフト(MA-EYES)の製品開発に従事。英語や会計等、システム開発以外のスキルを活かして官公庁やメーカ系のシステム開発で活躍中。少し前に、パッケージソフトMA-EYESの開発を通して「POI」を知り尽くし、勢い余って本稿の執筆に至る。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4971 2010/03/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー