Apache POI Комментировать Excel - PullRequest
3 голосов
/ 07 мая 2010

Мне нужно добавить комментарий к ячейке HSSF в Excel. Все отлично работает в первый раз, но если я открою тот же файл и снова запусту код, он повредит файл.

Я также заметил, что мне нужно создать объект рисования на листе только один раз:

_sheet.createDrawingPatriarch ();

Если строка выше выполняется несколько раз, комментарии не будут работать.

Так кто-нибудь пробовал добавлять комментарии к ячейкам, закрывать файл, снова открывать файл и пытаться добавить больше комментариев в разные ячейки?

Приведенный ниже код работает, но если я снова открою файл, комментарии не будут добавлены, плюс файл будет поврежден !!!

Есть ли способ получить существующий объект Drawing из листа?

Любые идеи приветствуются. Спасибо !!

_drawing = (HSSFPatriarch) _sheet.createDrawingPatriarch();

Row row = _sheet.getRow(rowIndex_);
Cell cell = row.getCell(0);
CreationHelper factory = _workbook.getCreationHelper();

HSSFAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short)6, 5);
        org.apache.poi.ss.usermodel.Comment comment = _drawing.createComment(anchor);
RichTextString str = factory.createRichTextString("Hello, World "+rowIndex_);
comment.setString(str);

  cell.setCellComment(comment);

1 Ответ

2 голосов
/ 07 мая 2010

Отказ от ответственности: У меня нет особого опыта с этим.

Однако я отмечаю, что Javadoc для createDrawingPatriarch () отмечает, что это будетуничтожить любую предыдущую графику (включая, я думаю, комментарии, так как кажется, что комментарии хранятся как часть чертежа патриарха).Пытались ли вы сначала проверить, есть ли в документе чертежный патриарх, и создавать его, только если его нет, например,

HSSFPatriarch drawing = document.getDrawingPatriarch()
if (drawing == null)
    drawing = document.createDrawingPatriarch()

По-прежнему кажется, что это может быть несколько хрупким, учитывая комментарии в документации по getDrawingPatriarch () , но я подозреваю, что это может работать для вашего варианта использования.

...