XLSBeans-ext
Amaterasで公開されているJavaライブラリに「XLSBeans」というものがあります。
公開されてから非常に重宝していますが、出力機能やConverter機能がないので、少し不便だったりします。
そこで、独自に機能をXLSBeansに下記の機能を追加したもの
追加情報(2014-12-01)
XlsMapperとして、リリースしました。
変更したソース(zipで固めています)
- バージョン1.1.0をもとに修正しています。
- バージョン1.2.0から追加されたOffice2007のXML形式には対応していません。
変更内容
Converter機能を追加しました。
- 数字、Booleanなどのプリミティブ型、Date型にマッピングできます。
- アノテーション「@Converter」を使用し、フォーマットを指定できます。
- XLSBeanのチケットに登録されているConvererの方式をもとにしています。
/* ○Date型にマッピングする。 * Date型、Time型、Timestamp型にマッピングできます。 */ @LabelledCell(label="更新日時", type=LabelledCellType.Bottom) @Converter(format="yyyy年MM月dd日") private Date updateTime; /*○数値の書式を指定 * 読み込み時には必要ありませんが、書き込み時に利用します。 */ @Column(columnName="No.", optional=true) @Converter(format="##.0##") private int index; /*○Boolean型へのマッピング指定 * プロパティbooleanAsTrue、booleanAsFalseを指定します。 * 大文字、小文字の区別はありません。 */ @LabelledCell(label = "boolean", type = LabelledCellType.Right) @Converter(booleanAsTrue={"○", "TRUE"}, booleanAsFalse="×") private Boolean boolean;
出力機能を追加しました。
- XLSBeansクラスのsaveXXX()メソッドで保存可能です。
入力ファイル(ひな形ファイル)をコピーし、Beanを書き込む処理方法です。
そのため、まったく新しい表(新しい行を追加することはできる)を作成することはできません。
出力したファイルをそのまま再度読み込むことができます。
- 出力方法
/** * 入力として、フォーマットとなるExcel。 * 出力ファイルは新しく作成します。 */ Employer employer = new Employer(); new XLSBeans().save( new FileInputStream(new File("d:/employer_list.xls")), new FileOutputStream(new File("d:/out.xls")), null, employer);
- 出力する際の制御用の設定
/* * @HorizontalRecords、@VerticalRecordsにプロパティ「overRecord」を追加しています。 * ひな形ファイルの行に対して出力するデータの行が、termial指定した条件を超えた場合の動作を定義します。 * ・OverRecord.Break :超えた行を無視する * ・OverRecord.Copy :上部や左側のセルをコピー(書式をコピー)して、値だけを書き換えて出力します。 * ・OverRecord.Insert:行、列を追加してデータを出力します。上部や左側のその際に書式もコピーします。 * */ @HorizontalRecords(tableLabel="履歴", recordClass=EmployerHistory.class, terminal=RecordTerminal.Border, overRecord=OverRecord.Insert, clearRemainedCell=true) private List<EmployerHistory> history; /* * 出力対象の値がNullの場合、ブランクセルとして出力するかどうか * @Column、@MapColumnsの各アノテーションのプロパティ「blankIfNull=true|false」を指定します。 * falseを設定した場合、値がnullの場合例外が発生します。 */ @Column(columnName="日付", merged=true, blankIfNull=true) @Converter(format="yyyy-MM-dd") private Date historyDate;