@XlsCommentOption

アノテーション @XlsComment@XlsLabelledComment において、書き込み時のコメントの書式などを指定するためのアノテーションです。 [ver.2.1+]

また、フィールド Map<String, String> comments でコメントをマッピングするセルに対しても指定可能です。

書き込み時にコメントの表示/非表示設定をする。

アノテーション @XlsCommentOption の属性 visible を指定することで、書き込み時にコメントの表示/非表示設定をできます。

  • true場合、表示する設定になり、常にコメントが表示されます。

  • 既に設定されているコメントの設定よりも、アノテーションの設定が優先されます。

_images/CommentOption_visible.png

CommentOption(visible)

 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 にて、コメント枠の横サイズを指定します。

    • 単位は列数です。

    • 既にコメントが設定されている場合は、この設定は無視されます。

_images/CommentOption_size.png

CommentOption(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);