| Apache | Jakarta | POI |
POI HSSF - レコードジェネレータ - HOWTOPOI HSSF - レコードジェネレータ - HOWTO歴史レコードジェネレータは、ExcelのレコードをJavaクラスに変換する際のフラストレーションに起因して誕生しました。これを手作業で行うことは、非常に時間のかかる事です。そして、非常によく間違いを起こしてしまう原因ともなります。 レコードがどのようなものになるかを定義し、うざったい作業を全て行ってくれるユーティリティが必要とされました。そこで、レコードジェネレータが生まれた、というわけです。 能力レコードジェネレータは、入力用としてXMLを使い、以下の出力をします:
使用法レコードジェネレータは、Antターゲット(generate-records)として呼び出されます。_record.xmlで終わるsrc/records/definitionsディレクトリ内の全てのファイルを綿密に探し出します。そして、2つのファイルを生成します;レコード定義のJavaとテストケーステンプレートのJavaです。 レコードそれ自体は、以下の一般的なレイアウトを持っています: <record id="0x1032" name="Frame" package="org.apache.poi.hssf.record" excel-record-id="FRAME"> <description>The frame record indicates whether there is a border around the displayed text of a chart.</description> <author>Glen Stampoultzis (glens at apache.org)</author> <fields> <field type="int" size="2" name="border type"> <const name="regular" value="0" description="regular rectangle or no border"/> <const name="shadow" value="1" description="rectangle with shadow"/> </field> <field type="int" size="2" name="options"> <bit number="0" name="auto size" description="excel calculates the size automatically if true"/> <bit number="1" name="auto position" description="excel calculates the position automatically"/> </field> </fields> </record> The following table details the allowable types and sizes for the fields.
Javaレコードは、レコードジェネレータが起動するたびに再生成されますが、テストスタブは、テストスタブがまだ存在していないときだけ作成されます。これは、テストスタブを変更できるが生成されるレコードではない、という事を意味しています。 独自のフィールドタイプ時折、ビルトインのタイプでは満足できないこともあるでしょう。ストリームのエンコード・デコードをコントロールする場合は特にそうでしょう。これは、カスタム・タイプを使うことで達成することが可能です。 独自タイプによって、フィールドをエンコード/デコードする方法の定義をJavaで逃れる事が出来るようになるでしょう。カスタム・タイプをコーディングするには、以下のようにフィールドを宣言します: <field type="custom:org.apache.poi.hssf.record.LinkedDataFormulaField" size="var" name="formula of link" description="formula"/> ここで、custom:に続いて指定されているクラス名は、CustomFieldインターフェースを実装したクラスです。 それから、ご自身でエンコーディングを実装することが出来ます。 どのように動くか?レコードジェネレータはXMLファイルを使って動作し、XSLTを使ってスタイルを整形します。XSLTになんらかの形で少し制限があると仮定すれば、その大元にJavaコードを少し追加する必要があったのでしょう。 record.xsl, record_test.xsl, FieldIterator.java, RecordUtil.java, RecordGenerator.java をご覧になってください。 対応する"type"のHDF用のジェネレータがあります。詳細は、HDFのドキュメントをご覧下さい。 制限レコードジェネレータは、全ての可能性のあるレコード型を扱うことはなく、またそのように意図されていません。しばしば、レコードを手入力で生成する方が賢明な場合もあるでしょう。レコードジェネレータの主眼は、時間を節約することにありますから、其の事は忘れないで置いてください。 現在、レコードを生成するXSLファイルはJavaオブジェクトを呼び出すことでしょう。レコード生成用Javaコードは、最小限のコメントしかなく現在非常にごちゃごちゃしています。 |
| Special Thanks -- 【お問い合わせ/テキスト広告】 |