Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/02/02 14:00

 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を提供


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

著者プロフィール

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

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

バックナンバー

連載:最新POIでOffice Open XML形式のExcelファイルを操作
All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5