Как установить комментарии для 3 ячеек с помощью Apache Po - PullRequest
2 голосов
/ 04 октября 2010

Я хочу установить комментарии для 3 ячеек Excel, используя Apache POI.

Это мой исходный код:

import java.io.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

public class CellComments
{
    public static void main(String[] args) throws IOException  {

      HSSFWorkbook wb = new HSSFWorkbook();
      HSSFSheet sheet = wb.createSheet("Cell comments in POI HSSF");


      HSSFPatriarch patr = sheet.createDrawingPatriarch();
      HSSFCell cell1 = sheet.createRow(3).createCell((short)1);
      cell1.setCellValue(new HSSFRichTextString("Hello, World"));

      //anchor defines size and position of the comment in worksheet
      HSSFComment comment1 = patr.createComment(new HSSFClientAnchor(100, 100, 100, 100, (short)1, 1, (short) 6, 5));
      comment1.setString(new HSSFRichTextString("FirstComments"));
      cell1.setCellComment(comment1);
      System.out.println("Cell comments: "+cell1.getCellComment().getString());

      patr = sheet.createDrawingPatriarch();
      comment1 = patr.createComment(new HSSFClientAnchor(100, 100, 100, 100, (short)1, 1, (short) 6, 5));
      //HSSFComment comment2=patr.createComment(new HSSFClientAnchor(100, 100, 100, 100, (short)1, 1, (short) 6, 5));
      HSSFCell cell2 = sheet.createRow(6).createCell((short)1);
      cell2.setCellValue(36.6);
      comment1.setString(new HSSFRichTextString("second commetns"));
      cell2.setCellComment(comment1);
      System.out.println("Cell comments: "+cell2.getCellComment().getString());

      patr = sheet.createDrawingPatriarch();
      comment1 = patr.createComment(new HSSFClientAnchor(100, 100, 100, 100, (short)1, 1, (short) 6, 5));
      //HSSFComment comment3=patr.createComment(new HSSFClientAnchor(100, 100, 100, 100, (short)1, 1, (short) 6, 5));
      cell2 = sheet.createRow(10).createCell((short)1);
      cell2.setCellValue(150);
      comment1.setString(new HSSFRichTextString("Third commetns"));
      cell2.setCellComment(comment1);
      System.out.println("Cell comments: "+cell2.getCellComment().getString());

      FileOutputStream out = new FileOutputStream("C:/Documents and Settings/saravanan/Desktop/cellcomments.xls");
      wb.write(out);
      out.close();

    }
}

При запуске программы комментарии устанавливаются только для последней ячейки. Но я напечатал комментарии для первых двух ячеек, они были напечатаны нормально. Но не показано в листе Excel? Что здесь не так?

1 Ответ

5 голосов
/ 06 октября 2010

На этот раз вы задали вопрос, из-за которого я некоторое время пробовал код.

Ваша проблема в том, что эта строка появляется 3 раза, один раз перед каждым комментарием.

patr = sheet.createDrawingPatriarch();

С документы для этого метода,

Создает чертеж верхнего уровня патриарх. Это будет иметь эффект удаления любых существующих рисунков на этот лист.

Итак, ваши предыдущие комментарии удаляются каждый раз, когда вы создаете DrawingPatriarch.

Так что делайте это только один раз, до comment1. Остальные 2 раза удалите или закомментируйте эту строку.

...