タツノオトシゴのブログ

主にJavaに関するものです。

XLSBeans-ext

Amaterasで公開されているJavaライブラリに「XLSBeans」というものがあります。
公開されてから非常に重宝していますが、出力機能やConverter機能がないので、少し不便だったりします。
そこで、独自に機能をXLSBeansに下記の機能を追加したもの

追加情報(2014-12-01)

XlsMapperとして、リリースしました。

変更したソース(zipで固めています)

  • バージョン1.1.0をもとに修正しています。
  • バージョン1.2.0から追加されたOffice2007のXML形式には対応していません

変更内容

Converter機能を追加しました。
 /* ○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;