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