SHOEISHA iD

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

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

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

Office Open XML形式に対応したPOIの概要と環境構築

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

  • このエントリーをはてなブックマークに追加

 JavaからMicrosoftのドキュメントを操作するためのAPI「POI」の最新版では、Office 2007形式のファイルも扱えるようになりました。本稿では、POIの中からExcelを操作するコンポーネント(HSSF/XSSF)に対象を絞り、POIの概要と環境構築手順を紹介します。

  • このエントリーをはてなブックマークに追加

はじめに

 POIはJavaからMicrosoftのドキュメントを操作するためのAPIで、2007年6月からApache Software Foundationのトップレベルプロジェクトに格上げされました。オープンソースとして提供されているので誰でも無償で利用することができます。

 なぜ初期のリリース後、7年以上も経過し、多くの情報が存在するPOIを今回あらためて取り上げることにしたかと言うと、2009年9月リリースのVersion 3.5でOffice Open XML形式(以降、OOXML形式)への対応という大きな変更が加わったからです。

 分かりやすくいうと2007形式のExcel(xlsx)やWord(docx)のファイルも扱えるようになったということです。

 本連載では、POIの中からExcelを操作するコンポーネント(HSSF/XSSF)に対象を絞り、下記の予定で紹介していきます。

  • 準備編:POIの概要と環境構築(今回)
  • 基本編:Usermodel APIを利用してExcelファイルを操作
  • 応用編:帳票とグラフ作りに挑戦
  • 番外編:OSSのフレームワークを利用してExcelレポートを簡単作成

 また、本連載はOOXML形式のExcelファイルを基本として進めますが、Excel 2003以前のMicrosoft OLE2複合ドキュメント形式(以降OLE2形式)への対応方法についても随時紹介していきます。

対象読者

  • JavaでExcelファイルを操作したい方

POIの概要

 POIはPoor Obfuscation Implementation(不十分で曖昧な実装)を表わしており、旧来(2003以前)のOLE2形式は不十分なものだという皮肉から名付けられています。

 このOLE2形式は、Office独自のファイルフォーマットのため下記のような問題を持っていました。

  • 専用アプリケーションがないと操作できない
  • バージョンアップによって互換性が失われる可能性がある
  • 検索性が落ちる

 これだけ日々の業務で利用・蓄積されたデータが特定の会社の独自フォーマットに基づいているというのは、確かに恐ろしい話です。

 このような背景から、オープンな規格へというニーズに対応したのがOOXML形式への移行です。

OOXML形式

 OOXML形式はECMA(European Computer Manufacturer's Association:欧州電子計算機工業会)を経由してISO/IEC(国際電気標準会議)で標準化されたオープンな規格で、OpenOfficeも対応しています。

 このように利用者にはメリット(その多くは目に見えないものですが)が多いファイルフォーマットの変更ですが、POIやその他のOfficeを扱うライブラリはすぐには対応できず、OOXML形式を扱えない状態が続いていました。

 そんな中、ついに2009年9月にリリースされたPOI 3.5からOOXML形式のファイルもサポート対象になりました。つまりPOIを利用して、拡張子が「xlsx」「docx」といった2007形式のファイルの読み書きが可能になったのです。

 このことは、単なる新たなファイルフォーマットへの対応というだけでなく、扱えるデータ件数の増加やピボット機能の充実など、Excel 2007の機能を利用して、より多くのシーンでPOIが利用できるようになったことを意味します。

 JavaでExcelファイルを操作するAPIとしてはPOIの他に「Java Excel API」が有名ですが、執筆時点(2009年12月)では、Java Excel APIはOOXML形式のファイルをサポートしていません。

 また、POIと言うとExcelのイメージが強いのですが、Excelだけではなく、Word、PowerPoint、Outlook、Visio、PublisherへのJava用APIも提供しています。ただし、Excelへのサポートと比較するとまだまだ十分ではない状況です。下記にPOIのコンポーネント一覧を記載します。

POIコンポーネント一覧
コンポーネント 対応アプリケーション
POIFS OLE2 Filesystem
HPSF OLE2 Property Sets
HSSF / XSSF Excel(拡張子XLS/XLSX)
HSLF / XSLF PowerPoint(拡張子PPT/PPTS)
HWPF / XWPF Word(拡張子DOC/DOCX)
HDGF Visio(拡張子VSD)
HPBF Publisher(拡張子PUB)
HSMF Outlook(拡張子MSG)
OpenXML4J OOXML

 本連載ではExcelのみを対象としますので下記コンポーネントを利用します。

  • XSSF:拡張子xlsxのExcelファイルの生成、加工、読み書きに必要です。
  • HSSF:Excel 97以降の拡張子xlsのExcelファイルの生成、加工、読み書きに必要です。
  • POIFS: OLE2形式(xls、docなど)のファイル生成と読込みに必要です。
  • OpenXML4J:ECMA-376 で定義されている、Zipファイル形式を採用しているOpen Packaging Conventions用のピュアJava実装で、OOXML形式(xlsx、docxなど)のファイルを利用する場合に必要です。

 また、version3.5からAPIへの大きな変更点として下記パッケージが導入されています。

  • org.apache.poi.xssf
  • OOXML形式のExcelファイルを操作するために必要なAPIを提供

  • org.apache.poi.ss
  • OOXMLとOLE2形式の両方をサポート可能にする共通インターフェイスAPIを提供

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
環境構築

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

  • このエントリーをはてなブックマークに追加
最新POIでOffice Open XML形式のExcelファイルを操作連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4783 2010/02/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング