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チェック


5. HSSFの機能
本節では,HSSFが提供する機能とAPIを,XLSフ ァイルの読み込みと出力のサンプルプログラムを交え て説明します.

5.1 HSSFの機能と制限
HSSFは,Excel 97のXLSファイルを読み書きする ための100% Javaによるクラスライブラリです. HSSFが提供する主な機能は次の通りです.
  • ワークブックの生成と読み込み
  • ワークシート,行,セルの生成
  • セル値の設定と取得
  • セル値の表示形式の処理
  • セルの罫線,色,パターン,フォントの設定
  • 行,列の幅と高さの設定
  • ヘッダ,フッタの処理
  • ウインドウ枠の処理
  • シートの拡大率,印刷範囲の設定
Excel 95以前のXLSファイルフォーマットはExcel 97のBIFF8と異なります(Excel 95はBIFF5形式). このため,HSSFではExcel 95以前のXLSファイルを 正しく読み込むことはできません.また,現時点で は,チャートやリッチテキストを含むセル,マクロな どサポートされていない機能もありますので,複雑な シートを処理する必要がある場合は,求める機能が HSSFに実装されているかどうかをあらかじめ確認し ておく必要があります.
POI には, BiffViewer(org.apache.poi.hssf.dev.BiffViewer) というツールが付属しています. このツールを使用すると,目的の機能がHSSFに実装 されているかどうかを判断する目安を得ることができ ます.処理(読み込み,または生成)したいXLSファ イルをExcelを使用して作成し,そのXLSファイルを 引数に指定してBiffViewerを実行すると,POIが処理 できないデータについては,その旨メッセージが表示 されます.
なお,チャートについては,POI 2.0からサポート される予定です.リッチテキストを含むセルやマクロ に関しては,現在サポート予定はありません.

5.2 HSSFが提供するAPI
HSSFでは,ExcelのXLSファイルを操作するため に,ユーザモデルAPIとイベントモデルAPIという2種 類のAPIを提供しています.

1) ユーザモデルAPI
ユーザモデルAPIは,Excelのドキュメントをメモ リ内に展開して扱うためのAPIです.スプレッドシー トの構造をメモリ内に展開して保持するため,修正や 削除などシートの操作を容易に行うことができます.

2) イベントモデルAPI
イベントモデルAPIは,イベント駆動型のAPIで, ドキュメント構造をイベントとしてアプリケーション に通知します.展開した完全なドキュメント構造を POI内部で保持するわけではありませんので,ユーザ モデルAPIより効率の高い処理が可能です.このAPI は,読み込み専用のAPIです.

イベントモデルAPIとユーザモデルAPIは,XMLパ ーサにおけるSAXとDOMのような関係です.メモリ や処理速度などの効率を重視する必要がある場合には イベントモデルAPIを使用し,シートに対して複雑な 処理を実行する場合にはユーザモデルAPIを使うほう が実装が容易です.また,イベントモデルAPIは,XLS ファイルの構造に関するより詳細な理解が必要です. なお,イベントモデルAPIは,読み込み専用のAPIで すので,XLSファイルの生成を行う場合はユーザモデ ルAPIを使用する必要があります.本稿では,ユーザ モデルAPIを中心に説明を行います.

5.3 スプレッドシートの構造
ユーザモデルAPIにおける,スプレッドシートの構 造を表したのが図1です.
    図1 ワークブックの構造

ドキュメント全体が,ワークブックです.ワークブック内には,複数のワークシ ートがあります.ワークシートには複数の行があり, 行には複数のセルがあります.セルには値(セル値) が保持されます.
スプレッドシートの構造に対して,HSSFが提供す るクラスの対応を表3に示します.
    表3 HSS の提供する主なクラス
    Excelの構造POIの提供するクラス
    ワークブックHSSFWorkbook
    ワークシートHSSFSheet
    HSSFRow
    セルHSSFCell
    セルスタイルHSSFCellStyle
これらの関係を表したものが図2です(概念的な関係を示しています).
    図2 ワークブックのクラス図(概念図)

セルの表示上の属性を示すクラ スにセルスタイルがあります.セルスタイルは,セル の色,罫線の種類など,セルの表示に関する情報を保 持しています.セルスタイルはワークブックが保持し ており,同じ表示属性を持つセルには同一のセルスタ イルを設定することができます.

5.4 ユーザモデルAPIによる表の読み込み
リスト2は,ユーザモデルAPIを使用して,XLSファイルを 読み込むサンプルプログラムです.

リスト2 XLSファイルを読み込むサンプルプログラム
1:   import java.io.FileInputStream;
2:   import java.text.DateFormat;
3:   import java.util.Date;
4:   import org.apache.poi.hssf.model.*;
5:   import org.apache.poi.hssf.usermodel.*;
6:    
7:   public class HSSFReadSample {
8:    
9:       public static void main(String[] arg) throws Exception {
10:    
11:           String filename = arg[0];
12:           FileInputStream is = new FileInputStream(filename);
13:    
14:           // ワークブック・ワークシートの取得
15:           HSSFWorkbook book = new HSSFWorkbook(is);  // ← (1)
16:           HSSFSheet sheet = book.getSheetAt(0);      // ← (2)
17:           System.out.println("number of sheets : " + book.getNumberOfSheets());
18:           System.out.println("sheet name : " + book.getSheetName(0));
19:    
20:           int first = sheet.getFirstRowNum();  // ← (3)
21:           int last  = sheet.getLastRowNum();   // ← (3)
22:           System.out.println("first row : " + first);
23:           System.out.println("last row  : " + last);
24:    
25:           HSSFRow row = null;
26:           HSSFCell cell = null;
27:           DateFormat dateform = DateFormat.getDateInstance();
28:           for (int i=4;i<=6;i++) {
29:    
30:               // 行・セル・セル値の取得
31:               row = sheet.getRow(i);          // ← (4)
32:               cell = row.getCell((short)1);   // ← (5)
33:               String product = cell.getStringCellValue();  // ← (6)
34:    
35:               // セル値を日付として取得
36:               cell = row.getCell((short)2);
37:               Date incoming = cell.getDateCellValue();     // ← (7)
38:               String date = dateform.format(incoming);
39:    
40:               cell = row.getCell((short)3);
41:               double price = cell.getNumericCellValue();   // ← (8)
42:    
43:               cell = row.getCell((short)4);
44:               int num = (int)cell.getNumericCellValue();
45:    
46:               cell = row.getCell((short)5);
47:               double sum = cell.getNumericCellValue();
48:    
49:               System.out.print(i + " : " );
50:               System.out.println(product + "," + date + "," + price + "," + sum);
51:           }
52:    
53:           // セルの型・表示形式の取得
54:           row = sheet.getRow(7);
55:           cell = row.getCell((short)5);
56:           System.out.println("cell_type    : " + cell.getCellType());
57:           System.out.println("cell_value   : " + cell.getNumericCellValue());
58:           System.out.println("cell_formula : " + cell.getCellFormula()); // ← (9)
59:    
60:           is.close();
61:       }
62:   }


図3はこのサンプルプログラムが読み込む対象の XLSファイル,図4は実行結果です.

    図3 サンプルプログラムが読み込むXLSファイル


    図4 実行結果
    C:\>java HSSFReadSample Sample.xls
    number of sheets : 3
    sheet name : Sheet1
    first row : 0
    last row : 7
    4 : ポイ,2003/06/13,1500.0,3000.0
    5 : Jetspeed,2003/07/01,2300.0,2300.0
    6 : メイレット,2003/06/19,4500.0,18000.0
    cell type : 2
    cell value : 23300.0
    cell formula : SUM(F5:F7)
    
サンプルプログラムはこのXLSファイルを読み込ん で,シートの数や名称,シートに含まれるデータの行 番号,セル上のデータの取得などを行います.以下で は,ワークブック・ワークシート・行・セルの操作を, サンプルプログラムとともに説明します.

5.4.1 ワークブック(HSSFWorkbook)の操作
ワークブック全体を表すクラスは,HSSFWorkbook クラスです.
HSSFWorkbookクラスには,XLSファイルの読み 込みと出力,ワークシートの取得・生成・複製・削 除などのシートの操作,さらにセルの表示上の属性を 示す情報であるセルスタイルやフォントの生成などを 行うメソッドが用意されています(表4).XLSファイ ルを読み込む場合,HSSFWorkbookのコンストラク タにXLSファイルを入力ストリームとして渡します(リ スト2-(1)).
    表4 HSSFWorkbook オブジェクトの主なメソッド
    ワークブック関連処理
    write(出力ストリーム)ワークブックを出力する
    シート関連
    createSheet(シート名)新たなシートを生成する
    cloneSheet(シート番号)シートを複製する
    getSheet>(シート名)シートオブジェクトを取得する
    getSheetAt(シート番号)シートオブジェクトを取得する
    getSheetName(シート番号)シート名を取得する
    removeSheetAt(シート番号)シートを削除する
    セルスタイル関連
    createCellStyle()新たなセルスタイルオブジェクトを生成する
    createFont()フォントを生成する
ワークブック中からワークシートを取り出すメソッ ドとして,HSSFWorkbookクラスにはgetSheetAt() メソッドが用意されています(リスト2-(2)).シート 番号は,0から始まります.ワークシートに付けられ た名前がわかっている場合には,getSheet()メソッド の引数にワークシート名を指定することでワークシー トを取得することも可能です.その他サンプルプログ ラムでは,HSSFWorkbookオブジェ クトを使用して,ワークブック内に 含まれるワークシートの数や名前の取 得などの処理を行っています.

5.4.2 ワークシート(HSSFSheet)の操作
ワークシートを表すのが, HSSFSheetクラスです.HSSFSheet クラスには,行の取得・生成・削除 などの操作や,列の幅の設定や取得 などを行うメソッドが用意されていま す(表5).
    表5 HSSFSheetクラスの主なメソッド
    列関連のメソッド
    getColumnWidth(列番号)列の幅を取得する
    setColumnWidth(列番号,)列の幅を設定する
    行関連のメソッド
    getFirstRowNum()最初の行の行番号を取得する
    getLastRowNum()最後の行の行番号を取得する
    rowIterator()データのある行をIteratorで取得する
    createRow(行番号)行を作成する
    removeRow()行を削除する
ワークシートの最初の行と最後の 行を取得するために,HSSFSheetク ラスにはそれぞれgetFirstRowNum() とgetLastRowNum()メソッドがあり ます(リスト2-(3)).
シートから行を取得するためのメソ ッドとして,getRow()メソッドが用 意されています(リスト2-(4)).シー ト中の何行目に目的のデータが含ま れているかわかっている場合は,この メソッドでその行を取得することがで きます.どの行にデータが存在する か事前にわかっていない場合には,デ ータのある行のみをIteratorで取得す るrowIterator()メソッドなどを使用 します.rowIterator()を使用する場 合は,次のようになります.
Iterator it = sheet.rowIterator();
while(it.hasNext()) {
    HSSFRow row = (HSSFRow)it.next();
    Iterator it = sheet.rowIterator();
    while(it.hasNext()) {
    HSSFRow row = (HSSFRow)it.next();
    …
}
HSSFSheetクラスには,列の表示上の幅を設定す るためのメソッドも用意されています.後述しますが, XLSを生成するサンプルプログラムでは,列の幅の設 定を行っています.

5.4.3 行(HSSFRow)の操作
行を表すのが,HSSFRowクラスです.このクラス には,セルの生成・削除・取得などのセルの操作や, 行の高さを設定・取得するメソッドが用意されていま す(表6).
    表6 HSSFRow クラスの主なメソッド
    セル関連のメソッド
    createCell(列番号)セルを生成する
    removeCell(セル)セルを削除する
    getCell(列番号)セルを取得する
    cellIterator()セルをIteratorとして取得する
    getFirstCellNum()データのある最初のセルの列番号を取得する
    getLastCellNum()データのある最後のセルの列番号を取得する
    行の高さを処理するメソッド
    getHeight()行の高さを取得する
    setHeight(高さ)行の高さを設定する
サンプルプログラムでは,getCell()メソッドを使用 して行からセルを取得しています(リスト2-(5)).どの セルにデータが存在するか事前にわかっていない場合 は,getFirstCellNum()や,getLastCellNum()など のメソッドでデータの存在するセルを調べるか,ある いはデータのあるセルのみをIterator で取得する cellIterator()メソッドなどを使用してセルを取得しま す.

5.4.4 セルの操作
セルを表すのが,HSSFCellクラスです.このクラ スには,セルの値とその型,およびセルスタイルの設 定と取得などのメソッドが用意されています(表7).
    表7 HSSFCell クラスの主なメソッド
    セルスタイル関連のメソッド
    setCellStyle(セルスタイル)セルスタイルを設定する
    getCellStyle()セルスタイルを取得する
    セル値関連のメソッド
    setCellValue(セル値)セルに値を設定する
    getCellType()セルの型を取得する
    getBooleanCellValue()論理値のセル値を取得する
    getDateCellValue()セル値を日時として取得する
    getNumericCellValue()数値のセル値を取得する
    getStringCellValue()文字列のセル値を取得する
    getErrorCellValue()セル値をエラーコードとして取得する
    setCellFormula()セルに式を設定する
    getCellFormula()セルに設定された式を取得する
    セルのエンコーディング関連メソッド
    setEncoding(エンコーディング)セルの文字エンコーディングを設定する
    getCellEncoding()セルの文字エンコーディングを取得する
セルの値には型があります.型の一覧を表8に示します.
    表8 セル値の型
    意味
    BLANK
    BOOLEAN論理値
    ERRORエラー
    FORMULA
    NUMERIC数値
    STRING文字列
サンプルプログラムでは,1番目のセルの値は 文字列として,2番目のセルの値は日付として,3番 目のセルの値は数値として取得しています(リスト2-(6),(7),(8)).
設定されているデータの型と異なる型でデータを取 得しようとするとExceptionが発生します.たとえば, 文字列が入っているセルに対して,getNumeric CellValue()を実行するとExceptionが発生します.セ ルに設定されているデータの型が未知である場合は, getCellType()メソッドでセルの型を調べてから,そ の型に適合するメソッドでデータを取得する必要があ ります.
セルの型として日時はありませんが,セルには日時 を設定・取得するメソッドが用意されています(表7). 日時は,セルの型としては数値(NUMERIC)が用い られており,日時という型はありません.そのため,日 時が設定されているセルに対して,getCellType()で型 をチェックしてもNUMERICが返ってきてしまいます. セルに入っている数値が日付であるかどうかは,以下 のようにHSSFDateUtil.isCellDateFormat()メソッド で確認できます.
if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
    if (HSSFDateUtil.isCellDateFormmated(cell) == true) {
        Date date = cell.getDateCellValue();
        ・・・
    }
}
図3のF8セルは,合計の計算です.F8のセルに対 して,cell.getCellType()でセルの型を取得すると, F8 セルはFORMULA であることがわかります.
cell.getCellFormula()で設定されている式を取得する ことができます(リスト2-(9)).またこのセルに対し て,cell.getNumericCellValue()でセルの値を取得す ることも可能です.

5.5 ユーザモデルAPIによるXLSの出力
ここまでXLSファイルの読み込み処理を見てきまし た.ユーザモデルAPIを用いて,XLSファイルを生成 したり編集したりすることもできます.XLSの生成お よび編集に関する主な機能は,以下の通りです.
    (1) シート,行,セルの生成,編集
    (2) セルへの値(数値,文字,日付,式など)の設定
    (3) 列の幅,行の高さの設定
    (4) セルスタイル(フォント,色,背景色,背景パターンなど)の設定,編集
    (5) その他,セルの連結や表示倍率,印刷範囲の設定など
ユーザモデルAPIを使用して,XLSファイルを出力 するサンプルプログラムがリスト3です.

リスト3 XSLファイルを出力するサンプルプログラム
1:   import java.io.FileOutputStream;
2:   import java.util.Date;
3:   import org.apache.poi.hssf.usermodel.*;
4:   import org.apache.poi.hssf.usermodel.contrib.HSSFCellUtil;
5:   import org.apache.poi.hssf.usermodel.contrib.HSSFRegionUtil;
6:   import org.apache.poi.hssf.util.HSSFColor;
7:   import org.apache.poi.hssf.util.Region;
8:    
9:   public class HSSFWriteSample {
10:    
11:       public static void main(String[] args) throws Exception {
12:    
13:           // ワークブックとシートの作成
14:           HSSFWorkbook book = new HSSFWorkbook();       // ← (1)
15:           HSSFSheet sheet = book.createSheet("sheet1"); // ← (2)
16:    
17:           // セルへの値の設定
18:           HSSFRow row = sheet.createRow((short)1);      // ← (3)
19:           row.createCell((short)0).setCellValue(12345.0);  // ← (5)
20:           row.createCell((short)1).setCellValue("Hello!"); // ← (5)
21:           row.createCell((short)2).setCellValue(true);     // ← (5)
22:    
23:           // 文字列が日本語の場合
24:           HSSFCell cell = row.createCell((short)3);    // ← (4)
25:           cell.setEncoding(HSSFCell.ENCODING_UTF_16);  // ← (6)
26:           cell.setCellValue("日本語");
27:    
28:           sheet.setColumnWidth((short)4, (short)3840);  // 列の幅設定
29:    
30:           // 日時を設定
31:           HSSFCellStyle style = book.createCellStyle();       ← (9)
32:           style.setDataFormat(                                     // ← (7)
33:               HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));     // ← (7)
34:           cell = row.createCell((short)4);                         // ← (7)
35:           cell.setCellValue(new Date());                           // ← (7)
36:           cell.setCellStyle(style);                       // ← (10)
37:    
38:           // 式
39:           row = sheet.createRow((short)2);
40:           row.createCell((short)0).setCellValue(2);
41:           row.createCell((short)1).setCellValue(4);
42:           row.createCell((short)2).setCellValue(6);
43:           cell = row.createCell((short)3);
44:           cell.setCellFormula("SUM(A3:C3)");  // ← (8)
45:    
46:           // 罫線
47:           row = sheet.createRow((short)3);
48:           short[] border_type = {
49:               HSSFCellStyle.BORDER_THIN,   HSSFCellStyle.BORDER_MEDIUM,
50:               HSSFCellStyle.BORDER_DASHED, HSSFCellStyle.BORDER_DOUBLE  };
51:           for (int i=0; i<border_type.length; i++) {
52:               style = book.createCellStyle();
53:               style.setBorderBottom(border_type[i]);             // ← (11)
54:               HSSFCellUtil.createCell(row, i, "BORDER", style);  // ← (15)
55:           }
56:    
57:           // 色
58:           row = sheet.createRow((short)6);                      // ← (12)
59:           style = book.createCellStyle();                       // ← (12)
60:           style.setFillForegroundColor(HSSFColor.RED.index);    // ← (12)
61:           style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // ← (12)
62:           HSSFCellUtil.createCell(row, 2, "Color", style);      // ← (12)
63:    
64:           // フォント
65:           row = sheet.createRow((short)7);                      // ← (13)
66:           row.setHeightInPoints((short)30);  // 列の高さ設定    // ← (13)
67:           style = book.createCellStyle();                       // ← (13)
68:           HSSFFont font = book.createFont();                    // ← (13)
69:           font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         // ← (13)
70:           font.setFontHeightInPoints((short)24);                // ← (13)
71:           font.setColor(HSSFFont.COLOR_RED);                    // ← (13)
72:           style.setFont(font);                                  // ← (13)
73:           HSSFCellUtil.createCell(row, 4, "FONT", style);       // ← (13)
74:    
75:           // 罫線
76:           Region region = new Region(6, (short)2, 7, (short)4);
77:           short border  = HSSFCellStyle.BORDER_DASHED;
78:           HSSFRegionUtil.setBorderTop(border, region, sheet, book);    // ← (16)
79:           HSSFRegionUtil.setBorderLeft(border, region, sheet, book);   // ← (16)
80:           HSSFRegionUtil.setBorderRight(border, region, sheet, book);  // ← (16)
81:           HSSFRegionUtil.setBorderBottom(border, region, sheet, book); // ← (16)
82:    
83:           // 出力
84:           FileOutputStream out = new FileOutputStream("Sample.xls");
85:           book.write(out);                                      // ← (14)
86:           out.close();        
87:       }
88:   }


これは,さまざまな型や表示形式,色を使ったシートを出力する サンプルです.このサンプルプログラムにより出力し たXLSファイルが図5です.

    図5 サンプルプログラムが出力するファイル



5.5.1 ワークブックとワークシートの生成
ワークブックの新規生成は,HSSFWorkbookのイ ンスタンスをコンストラクタから作成するだけです(リ スト3-(1)).ワークブックに新しいシートを作成する場 合は,HSSFWorkbookオブジェクトのcreateSheet() メソッドを使用します(リスト3-(2)).以上で,ワー クブック,ワークシートが生成されました. ワークブックは,ワークシートを複数持つことが可 能ですので,createSheet()は複数回実行することも できます.

5.5.2 行の作成
ワークシートに行を追加するためには,ワークシー ト(HSSFSheet)オブジェクトのcreateRow()メソッ ドを使用します(リスト3-(3)).引数は行番号です. 行番号は0オリジンですが,データのない行は生成す る必要がなく,いきなり3行目から生成することも可 能です.

5.5.3 セルの生成と,セルへの値の設定
行にセルを追加するためには,行(HSSFRow)オ ブジェクトのcreateCell()メソッドを使用します(リ スト3-(4)).引数は,セルの列番号です.0オリジン ですが,データのないセルは生成する必要がなく,い きなり3列目のセルを生成することも可能です. セルへの値の設定は,セル(HSSFCell)オブジェ クトのsetCellValue()メソッドを使用します(リスト 3-(5)).設定できる値は,次のいずれかのオブジェク トです.
  • boolean
  • double
  • java.util.Calendar
  • java.util.Date
  • java.lang.String
セルに日本語を設定する場合には,セルの文字エン コーディングを指定する必要があります.これには, setEncoding()メソッドを使用し,データがUTF-16 であることを指定します(リスト3-(6)).
セルに日時を設定する場合には,通常日時の表示 フォーマットも同時に指定します.表示フォーマット は,セルスタイルに設定します(リスト3-(7)).セルス タイルについては次節でもう少し詳しく説明します. セルには式も設定できます.式を設定するには, setCellFormula()メソッドを使用します.ただし,現 時点では使用できる式は限られていますので,式を使 う場合には事前に使用可能かどうか確認してください. サンプルプログラムでは,関数SUM()を使用してい ます(リスト3-(8)).

5.5.4 セルスタイルの設定
セルに色をつけたり,フォントを指定するなど,セ ルの表示に関わる設定は, セルスタイル (HSSFCellStyle)を用います.セルスタイルを用いて 設定できる主な項目には,次のものがあります.
  • 罫線
  • フォント

  • 表示形式
セルスタイルは,ワークブック(HSSFWorkbook) オブジェクトから生成します.HSSFWorkbook の createCellStyle()メソッドで,セルスタイルが生成され ます(リスト3-(9)).作成されたセルスタイルに対して, フォントや罫線などを設定し,最後にそのセルスタイ ルをセルと関連付けることで,そのセルに指定のスタ イルが適用されます(リスト3-(10)).セルとセルスタ イルは1対1の関係ではなく,同じセルスタイルを複 数セルに適用することも可能です.この場合には,セ ルスタイルに変更を加えると,そのセルスタイルと関 連付けられたすべてのセルの表示が更新されてしまう ことに注意してください.次に,各種セルスタイルの 設定方法を見ていくことにします.

1) 罫線
罫線を指定する場合には,setBorderXXX()メソッ ドを使用します(リスト3-(11)).サンプルプログラム では,下線(Bottom)を指定していますが,上 (Top)/下(Bottom)/左(Left)/右(Right)に も罫線を設定することができます. 罫線の種類は,setBorderXXX()メソッドの引数に 指定します.Excelに用意されているさまざまな罫線 が設定でき,setXXXBorderColor()メソッドにより, 罫線の色も指定することが可能です(XXXは,Top, Bottom,Left,Rightのいずれか).

2) セルの色
セルの背景色を指定する例がリスト3-(12)です. setFillPattern()メソッドで,背景のパターンを設定す ることもできます.

3) フォント
表示フォントを指定する例がリスト3-(13)です.フ ォントは,ワークブック(HSSFWorkbook)オブジ ェクトのcreateFont()メソッドを使用して生成します. 作成したフォントに対して,フォント名,ボールド, イタリック,フォントサイズ,色などの属性を設定す ることができます.サンプルプログラムでは,ボール ド,サイズ,色を指定しています.
フォントの設定が終了したら,そのフォントをセル スタイルに設定し,そのセルスタイルをセルに設定す ることでフォントの指定が有効になります.

4) 表示形式
セルの表示形式は,セルスタイルのsetDataFormat() で指定することができます(リスト3-(7)).サンプル プログラムでは日時の表示形式を指定していますが, 同様にHSSFDataFormatクラスを使用して,数値な どの表示形式を指定することもできます.

5.5.5 出力
作成したワークブックを出力するには,ワークブッ クのwrite()メソッドを使用します(リスト3-(14)).

5.5.6 ユーティリティ群
今まで説明したメソッドは,XLSファイルのデータ 構造に基づき,データを直接操作する基本的なAPIを 使用するものでした.セルの生成や,罫線の設定など については,便利なユーティリティクラスが用意され ています.

1) HSSFCellUtilクラス
HSSFCellUtilクラスは,セルの生成や取得,フォ ントの設定,アラインメントの指定などを容易にする メソッドを提供するユーティリティクラスです. セルの生成は,リスト3-(4)ではHSSFRowクラスの createCellメソッドを使用していますが,リスト3-(15) では,HSSFCellUtil.createCell()メソッドでセルを生 成しています.HSSFCellUtil.createCell()メソッド は,行とセルの位置,セルの値,セルスタイルを一度 に指定してセルを生成することができます. その他にHSSFCellUtilには,getCell( row, column) メソッド,getRow( rowCounter, sheet)メソッドなど, セルや行を取得する簡易メソッドもあります.これは, 指定したセルや行がすでに存在すればその行やセルを 取得し,存在しなければ新たに生成し,それを取得す ることができます.

2) HSSFRegionUtilクラス
リスト3-(16)で使用しているHSSFRegionUtilクラス は,セルの矩形領域(Regionクラス)をまとめて操 作するためのユーティリティクラスです.矩形領域に 対して,まとめて罫線を引くことができます.






 << prev  ↑ POI index  next >>


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


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