How to set comments for 3 cells using apache poi

给你一囗甜甜゛ 提交于 2020-01-23 15:22:09

问题


I want to set comments for 3 excel cells using Apache POI.

This is my source code:

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

    }
}

While run the program, comments set only for last cell. But I printed the comments for the first two cells it was printed fine. But not shown in the excel sheet? What's incorrect here?


回答1:


For once you've asked a question which had me trying out the code for a while.

Your problem is this line appears 3 times, once before each comment.

patr = sheet.createDrawingPatriarch();

From the docs for this method,

Creates the top-level drawing patriarch. This will have the effect of removing any existing drawings on this sheet.

So whats happening is that your earlier comments are getting removed each time you create the DrawingPatriarch.

So do this only once, before comment1. The other 2 times, remove or comment out this line.



来源:https://stackoverflow.com/questions/3855779/how-to-set-comments-for-3-cells-using-apache-poi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!