Apache POI: комментарии в нескольких ячейках не допускаются - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь добавить комментарий к ячейкам. Код отлично работает для 2 строк. Но когда номер строки переходит на третью, он начинает выдавать мне ошибку: -

java .lang.IllegalArgumentException: множественные комментарии в одной ячейке не допускаются

Я добавляю комментарий, когда обнаруживаю исключение при чтении из значения ячейки. Приведен метод, который я использую для добавления комментария: -

private void cellException(Sheet datatypeSheet, CellStyle cellErrorStyle, Row invCurrentRow,
        int invCellNum, String mainMessage)
{

    Cell mainCell = invCurrentRow.getCell(invCellNum);

    if (ExcelUtility.checkIfCellValueAbsent(mainCell))
        mainCell = invCurrentRow.createCell(invCellNum);

    mainCell.setCellStyle(cellErrorStyle);

    Comment mainComment = mainCell.getCellComment();

    if (Util.isNullOrEmpty(mainComment))
        mainComment = datatypeSheet.createDrawingPatriarch().createCellComment(
                new XSSFClientAnchor(0, 0, 0, 0, (short) 3, 3, (short) 5, 6));
    mainComment.setString(new XSSFRichTextString(mainMessage));
    mainCell.setCellComment(mainComment);
    datatypeSheet.autoSizeColumn(mainCell.getColumnIndex());
}

Этот код прекрасно работает для двух строк. Я не понимаю, что не так с третьим рядом.

Я использую XSSFWorkbook, и вот зависимость, которую я добавил в свой проект springboot: -

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>

Я попытался найти ответ и нашел тот, который, по моему мнению, может быть полезным, но он не было: -

Несколько комментариев apache poi

1 Ответ

2 голосов
/ 14 апреля 2020

Вы создаете все комментарии к ячейкам, используя одну и ту же привязку, которая начинается с индекса столбца 3, индекса строки 3, который равен D4. Таким образом, все ваши комментарии к ячейкам принадлежат D4. Затем, если вы попытаетесь создать комментарий к ячейке, используя тот же самый якорь, и в D4 уже есть комментарий, это приведет к ошибке:

java.lang.IllegalArgumentException: Multiple cell comments in one cell are not allowed, cell: D4

Использовать разные ахоры для каждого комментария к ячейке:

...
  if (mainComment == null)
   mainComment = datatypeSheet.createDrawingPatriarch().createCellComment(
                  //new XSSFClientAnchor(0, 0, 0, 0, (short) 3, 3, (short) 5, 6));
                  new XSSFClientAnchor(0, 0, 0, 0, mainCell.getColumnIndex(), mainCell.getRowIndex(), mainCell.getColumnIndex()+2, mainCell.getRowIndex()+3));
...
...