@XlsCommentOption
¶
アノテーション @XlsComment 、 @XlsLabelledComment において、書き込み時のコメントの書式などを指定するためのアノテーションです。 [ver.2.1+]
また、フィールド Map<String, String> comments
でコメントをマッピングするセルに対しても指定可能です。
書き込み時にコメントの表示/非表示設定をする。¶
アノテーション @XlsCommentOption
の属性 visible
を指定することで、書き込み時にコメントの表示/非表示設定をすることができます。
true場合、表示する設定になり、常にコメントが表示されます。
既に設定されているコメントの設定よりも、アノテーションの設定が優先されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // 書き込むデータ
SampleSheet sheet = new SampleSheet();
sheet.birthdayDescription = "yyyy/MM/dd の形式で設定してください。";
sheet.setBirthdayComment("設定してください。");
// マッピングの定義
@XlsSheet(name="Users")
public class SampleSheet {
private Map<String, String> comments;
@XlsCommentOption(visible=false)
@XlsLablledComment(label="誕生日")
private String birthdayDescription;
@XlsCommentOption(visible=true)
@XlsLabelledCell(label="誕生日", type=LabelledCellType.Right)
private LocalDate birthday;
// 誕生日の値セルのコメントの設定
public void setBirthdayComment(String comment) {
if(comments == null) {
this.comments = new HashMap<>();
}
this.comments.put("birthday", comment);
}
}
|
書き込み時にコメントの枠サイズを指定する¶
アノテーション @XlsCommentOption
の属性 verticalSize
/ horizontalSize
を指定することで、書き込み時のコメントの枠サイズを指定することができます。
属性
verticalSize
にて、コメント枠の縦サイズを指定します。単位は行数です。
既にコメントが設定されている場合は、この設定は無視されます。
属性
horizontalSize
にて、コメント枠の横サイズを指定します。単位は列数です。
既にコメントが設定されている場合は、この設定は無視されます。
1 2 3 4 5 6 7 8 9 | // マッピングの定義
@XlsSheet(name="Users")
public class SampleSheet {
@XlsCommentOption(verticalSize=5, horizontalSize=2)
@XlsCellComment(address="B2")
private String value;
}
|
書き込み時に既存のコメントを自動削除する¶
アノテーション @XlsCommentOption
の属性 removeIfEmpty
を指定することで、書き込むコメントの値が空のとき、既存のコメントを自動削除することができます。
属性 removeIfEmpty
の初期値は false
で削除されません。
1 2 3 4 5 6 7 8 9 | // マッピングの定義
@XlsSheet(name="Users")
public class SampleSheet {
@XlsCommentOption(removeIfEmpty=true)
@XlsCellComment(address="B2")
private String value;
}
|
コメントの読み込み、書き込みの処理の実装を切り替える¶
アノテーション @XlsCommentOption
の属性 handler
にて、コメントの処理を独自実装に切り替えることができます。
標準のコメントの処理は、 CellCommentHandler
の実装クラス DefaultCellCommentHandler
であるため、通常はこのクラスを継承してカスタマイズします。
全体の処理を切り替えたい場合は、システム設定 の CellCommentOperator
のプロパティ commentHandler
を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | @XlsSheet(name = "独自実装")
public class CustomHandlerSheet {
private Map<String, CellPosition> positions;
private Map<String, String> labels;
private Map<String, String> comments;
@XlsSheetName
private String sheetName;
@XlsLabelledCell(label = "標準の処理", type = LabelledCellType.Right)
private String value1;
@XlsCommentOption(handler = CustomCellCommentHandler.class)
@XlsLabelledCell(label = "独自実装の処理", type = LabelledCellType.Right)
private String value2;
}
/**
* カスタマイズしたセルのコメント処理
*/
public class CustomCellCommentHandler extends DefaultCellCommentHandler {
public CustomCellCommentHandler() {
super();
// 初期設定値の変更
setMaxHorizontalSize(5);
setMaxVerticalSize(4);
}
// 読み込み時の処理
@Override
public Optional<String> handleLoad(final Cell cell, Optional<XlsCommentOption> commentOption) {
Optional<String> comment = super.handleLoad(cell, commentOption);
// 改行を除去する。
return comment.map(text -> text.replaceAll("\r|\n|\r\n", ""));
}
// 書き込み時の処理
@Override
public void handleSave(final Cell cell, final Optional<String> text, final Optional<XlsCommentOption> commentOption) {
// 改行を除去する。
text.map(comment -> comment.replaceAll("\r|\n|\r\n", ""))
.ifPresent(comment -> super.handleSave(cell, Optional.of(comment), commentOption));
}
}
|
書き込み時にコメントの枠サイズを自動設定する¶
アノテーション @XlsCommentOption
の属性 verticalSize
/ horizontalSize
でコメント枠のサイズを指定しない場合は、
書き込むコメントの文字数、改行数によって自動的に設定されます。
ただし、コメント枠のサイズは、行数、列数で指定するため、コメントが表示される領域のセルのサイズが他と異なる場合、 意図したサイズにならない場合があります。
その際は、アノテーション @XlsCommentOption
を使用してサイズを直接指定します。
または、標準の自動設定値を変更します。 ここでは、標準の設定値を変更します。
標準のコメントの処理は、 CellCommentHandler
の実装クラス DefaultCellCommentHandler
で指定されます。
この実装は、システム設定 の CellCommentOperator
のプロパティ commentHandler
で保持しています。
初期値では、コメントの縦サイズは最大4行分まで、横サイズは最大3列分となります。
1 2 3 4 5 6 7 8 9 10 11 12 | // コメントを処理するハンドラのインスタンスを生成します。
DefaultCellCommentHandler commentHandler = new DefaultCellCommentHandler();
// コメントの縦サイズの最大サイズを指定します。
commentHandler.setMaxVerticalSize(5);
// コメントの横サイズの最大サイズを指定します。
commentHandler.setMaxHorizontalSize(5);
// システム設定値を変更します。
XlsMapper xlsMapper = new XlsMapper();
xlsMapper.getConfiguration().getCommentOperator().setCommentHandler(commentHandler);
|