I will be waiting for your knock ever after from today.


Visards, Inc.

Java Sticky Note

java
  ・JSTL
  ・Commons Net
  ・Apache
  ・Tomcat
  ・James
  ・Jetspeed
  ・POI
  ・Jexl
  ・Jelly
  ・Blojsom
  ・eclipse

link
  ・James

author
  ・profile

Jakarta POI  
<< prev | POI index | next >>
Jakarta POIで、Excelドキュメントを操作する

mixiチェック


3. POIとは
POIプロジェクトは, Apache Jakartaプロジェクト のサブプロジェクトで,Microsoft OLE2複合ドキュメント をJavaで取り扱うためのライブラリを開発しています. Jakartaの中では比較的新しいプロジェクトです.POI は,100% Pure Javaにより開発されており,Windows はもちろんLinux,Solarisでも利用可能です.また, Jakartaプロジェクトに属して開発されているので,そ のプロダクトは商用も含め無料で利用できます.
POIは,Poor Obfuscation Implementation(貧弱 で混乱した実装)の略で,OLE2複合ドキュメント形 式の仕様の貧弱さからこの名前が付けられたとされて います.POIは,プロジェクトの総称であり,POIFS, HSSF,HDF,HPSFなどのプロダクトを開発してい ます.これらのプロダクトの一覧を表1に示します. 以下で,これらのプロダクトの概要を説明します.

    表1 POI のプロダクト
    プロダクト概要
    POIFSOLE2複合ドキュメントを扱うためのJavaライブラリ
    HDFWord97形式のファイルを扱うためのJavaライブラリ
    HSSFExcel97形式のファイルを扱うためのJavaライブラリ
    HPSFOLE2プロパティを扱うためのJavaライブラリ

3.1 POIFS
POIFS(POI FileSystem)は,OLE2複合ドキュメ ントを扱うための共通ライブラリです.複合ドキュメ ントは,1つの文書の中に,異なる複数のアプリケー ションのパーツを埋め込むことを可能にする技術で, OLE2複合ドキュメントは,Microsoft社による複合 ドキュメント技術です.WordのDOCファイル,Excel のXLSファイル,PowerPointのPPTファイルなどは OLE2複合ドキュメントです.
OLE2複合ドキュメントの内部構造は,DOS時代 に多く使われたファイルシステムであるFATの構造に 類似しています.ドキュメント内部にはネスト可能な ディレクトリやファイルに相当する構造があり,さら にファイル名とファイルの作成時刻およびデータ部へ のポインタに関する情報など,FATファイルシステム におけるディレクトリエントリに相当する構造を持ち ます.これは,現在一般的に使用されているアーカイ ブの形式とは異なる構造で,データの編集や追加が容 易ではなく,さらにフラグメントの問題を発生させや すい構造となっています. Poor Obfuscation Implementationというプロジェクト名はここに由来し ているようです.
Excelファイルを取り扱うHSSFや,Wordファイル を取り扱うHDFは,POIFSを用いて実現されていま すが,HSSFを使用する上で,POIFSのAPIを意識す る必要はほとんどありません.
本稿では,Excelファイルの生成と読み込みを行う HSSFを中心に扱うため,POIFSについては詳細には 触れません.リスト1は,POIFSを用いてOLE2複合 ドキュメント内に含まれるファイル一覧を出力するサ ンプルプログラムです.

リスト1 POIFSのサンプルプログラム
1:   import java.io.FileInputStream;
2:   import java.util.Iterator;
3:   import org.apache.poi.poifs.filesystem.*;
4:    
5:   public class PoiLs {
6:    
7:       // 再帰的にファイルを探し、ファイル名を表示.
8:       public static void printFiles(DirectoryEntry directory) {
9:           Iterator it = directory.getEntries();
10:           while( it.hasNext() ) {
11:               Entry entry = (Entry)it.next();
12:               if (entry.isDirectoryEntry()) {
13:                   printFiles((DirectoryEntry)entry);
14:               }
15:               else if (entry.isDocumentEntry()) {
16:                   System.out.println(entry.getName());
17:               }
18:           }
19:       }
20:    
21:       public static void main(String[] arg) throws Exception {
22:           FileInputStream fin = new FileInputStream(arg[0]);
23:           POIFSFileSystem fs = new POIFSFileSystem(fin);
24:           DirectoryEntry root = fs.getRoot(); // ルートエントリの取得
25:           printFiles(root);
26:           fin.close();
27:       }
28:   }
29:    

ドキュメント内に階層的に存 在するディレクトリやファイルを,本APIを 用いて読み出せることがわかると思います. POIFSのAPIを用いることで,ドキュメ ント内のファイルの読み出し,ディレクト リ/ファイルの作成と削除,ファイル名の 変更などOLE2複合ドキュメント内の一通 りのファイル操作が可能です.

3.2 HDF
HDF(Horrible Document Format)は, Word 97のDOCファイルを処理するための クラスライブラリです.HDFは,次のHSSF と比べるとまだ完成度は低く,実用レベル ではありません.POIの次版である2.0版で は,いくらかの機能が追加される予定とな っています.

3.3 HSSF
HSSF(Horrible SpreadSheet Format)は,Excel 97のXLSファイルを処理するためのクラスライブラリ です.Excel 97のファイル形式は,BIFF8と呼ばれる もので,このファイル形式は,現在のExcel 2002まで 含めてほとんど変更がありません.したがって,この ライブラリを使用することで,現在使用されている多 くのExcelファイルを扱うことができます.本稿はこ のHSSFを用いて,XLSファイルを読み書きするプロ グラムの作成方法が中心テーマで,のちほどプログラ ミング方法について解説します.

3.4 HPSF
HPSF(Horrible Property Set Format)は,OLE2プ ロパティセットを処理するためのクラスライブラリで す.Word やExcel,PowerPoint など,Microsoft Officeアプリケーションが共通して持つドキュメント のプロパティ情報(タイトルや作成者,会社名,分類 等)を扱います.現在は,プロパティ情報の読み込み 機能のみサポートされており,出力機能はありませ ん.





 << prev  ↑ POI index  next >>


このドキュメントに関するご意見、ご要望などはまで。


Copyright (C) 2003-2005 Visards, Inc. All Rights Reserved.