]> source.dussan.org Git - poi.git/commitdiff
improved work with cell comments
authorYegor Kozlov <yegor@apache.org>
Mon, 12 Mar 2007 15:43:14 +0000 (15:43 +0000)
committerYegor Kozlov <yegor@apache.org>
Mon, 12 Mar 2007 15:43:14 +0000 (15:43 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@517261 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/hssf/quick-guide.xml
src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFComment.java

index 470dcb45899afaa52b3fb3a7b0cb9c9fb414bbc0..0d174b5bb2c309496c4839d85f12b397ace059ad 100644 (file)
          <p>
   Reading cell comments
         </p>
-        <source>
+  <source>
     HSSFCell cell = sheet.get(3).getColumn((short)1);
     HSSFComment comment = cell.getCellComment();
     if (comment != null) {
       HSSFRichTextString str = comment.getString();
       String author = comment.getAuthor();
     }
-       </source>
+    //  alternatively you can retrieve cell comments by (row, column)
+    comment = sheet.getCellComment(3, 1);
+  </source>
      </section>
      <anchor id="Autofit"/>
      <section><title>Adjust column width to fit the contents</title>
index 7d41f6d13533b4a11f2ea0f997351ea4de3c0f56..752f598afe6322738453d4b977ab7314922b0d11 100644 (file)
@@ -973,47 +973,59 @@ public class HSSFCell
     }
 
     /**
-     * Returns the comment associated with this cell
+     * Returns comment associated with this cell
      *
      * @return comment associated with this cell
      */
      public HSSFComment getCellComment(){
         if (comment == null) {
-            HashMap txshapes = new HashMap(); //map shapeId and TextObjectRecord
-            for (Iterator it = sheet.getRecords().iterator(); it.hasNext(); ) {
-                Record rec = ( Record ) it.next();
-                if (rec instanceof NoteRecord){
-                    NoteRecord note = (NoteRecord)rec;
-                    if (note.getRow() == record.getRow() && note.getColumn() == record.getColumn()){
-                        TextObjectRecord txo = (TextObjectRecord)txshapes.get(new Integer(note.getShapeId()));
-                        comment = new HSSFComment(note, txo);
-                        comment.setRow(note.getRow());
-                        comment.setColumn(note.getColumn());
-                        comment.setAuthor(note.getAuthor());
-                        comment.setVisible(note.getFlags() == NoteRecord.NOTE_VISIBLE);
-                        comment.setString(txo.getStr());
-                        break;
-                    }
-                } else if (rec instanceof ObjRecord){
-                    ObjRecord obj = (ObjRecord)rec;
-                    SubRecord sub = (SubRecord)obj.getSubRecords().get(0);
-                    if (sub instanceof CommonObjectDataSubRecord){
-                        CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord)sub;
-                        if (cmo.getObjectType() == CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT){
-                            //find the nearest TextObjectRecord which holds comment's text and map it to its shapeId
-                            while(it.hasNext()) {
-                                rec = ( Record ) it.next();
-                                if (rec instanceof TextObjectRecord) {
-                                    txshapes.put(new Integer(cmo.getObjectId()), rec);
-                                    break;
-                                }
-                            }
-
-                        }
-                    }
-                }
-            }
+            comment = findCellComment(sheet, record.getRow(), record.getColumn());
         }
         return comment;
     }
+
+    /**
+     * Cell comment finder.
+     * Returns cell comment for the specified sheet, row and column.
+     *
+     * @return cell comment or <code>null</code> if not found
+     */
+    protected static HSSFComment findCellComment(Sheet sheet, int row, int column){
+        HSSFComment comment = null;
+        HashMap txshapes = new HashMap(); //map shapeId and TextObjectRecord
+        for (Iterator it = sheet.getRecords().iterator(); it.hasNext(); ) {
+           Record rec = ( Record ) it.next();
+           if (rec instanceof NoteRecord){
+               NoteRecord note = (NoteRecord)rec;
+               if (note.getRow() == row && note.getColumn() == column){
+                   TextObjectRecord txo = (TextObjectRecord)txshapes.get(new Integer(note.getShapeId()));
+                   comment = new HSSFComment(note, txo);
+                   comment.setRow(note.getRow());
+                   comment.setColumn(note.getColumn());
+                   comment.setAuthor(note.getAuthor());
+                   comment.setVisible(note.getFlags() == NoteRecord.NOTE_VISIBLE);
+                   comment.setString(txo.getStr());
+                   break;
+               }
+           } else if (rec instanceof ObjRecord){
+               ObjRecord obj = (ObjRecord)rec;
+               SubRecord sub = (SubRecord)obj.getSubRecords().get(0);
+               if (sub instanceof CommonObjectDataSubRecord){
+                   CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord)sub;
+                   if (cmo.getObjectType() == CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT){
+                       //find the nearest TextObjectRecord which holds comment's text and map it to its shapeId
+                       while(it.hasNext()) {
+                           rec = ( Record ) it.next();
+                           if (rec instanceof TextObjectRecord) {
+                               txshapes.put(new Integer(cmo.getObjectId()), rec);
+                               break;
+                           }
+                       }
+
+                   }
+               }
+           }
+        }
+        return comment;
+   }
 }
index 770511457cfee7be45397999b9fbf48774eb7147..d5b7737e32433a005ab40a7398993a4c64623246 100644 (file)
@@ -1478,4 +1478,13 @@ public class HSSFSheet
         }
     }
 
+    /**
+     * Returns cell comment for the specified row and column
+     *
+     * @return cell comment or <code>null</code> if not found
+     */
+     public HSSFComment getCellComment(int row, int column){
+        return HSSFCell.findCellComment(sheet, row, column);
+    }
+
 }
index 918d1f8130b132da47f8e7e22343cfba4540e7a2..f1f18827321bc77226b575791026225a7c7b7452 100644 (file)
@@ -101,6 +101,7 @@ public class TestHSSFComment extends TestCase {
              cell = row.getCell((short)0);
              comment = cell.getCellComment();
              assertNull("Cells in the first column are not commented", comment);
+             assertNull(sheet.getCellComment(rownum, 0));
          }
 
          for (int rownum = 0; rownum < 3; rownum++) {
@@ -108,6 +109,8 @@ public class TestHSSFComment extends TestCase {
              cell = row.getCell((short)1);
              comment = cell.getCellComment();
              assertNotNull("Cells in the second column have comments", comment);
+             assertNotNull("Cells in the second column have comments", sheet.getCellComment(rownum, 1));
+
              assertEquals(HSSFSimpleShape.OBJECT_TYPE_COMMENT, comment.getShapeType());
              assertEquals("Yegor Kozlov", comment.getAuthor());
              assertFalse("cells in the second column have not empyy notes",