improved work with cell comments
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@517261 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5868b3f7f1
commit
8a3e83c0df
@ -1123,14 +1123,16 @@
|
|||||||
<p>
|
<p>
|
||||||
Reading cell comments
|
Reading cell comments
|
||||||
</p>
|
</p>
|
||||||
<source>
|
<source>
|
||||||
HSSFCell cell = sheet.get(3).getColumn((short)1);
|
HSSFCell cell = sheet.get(3).getColumn((short)1);
|
||||||
HSSFComment comment = cell.getCellComment();
|
HSSFComment comment = cell.getCellComment();
|
||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
HSSFRichTextString str = comment.getString();
|
HSSFRichTextString str = comment.getString();
|
||||||
String author = comment.getAuthor();
|
String author = comment.getAuthor();
|
||||||
}
|
}
|
||||||
</source>
|
// alternatively you can retrieve cell comments by (row, column)
|
||||||
|
comment = sheet.getCellComment(3, 1);
|
||||||
|
</source>
|
||||||
</section>
|
</section>
|
||||||
<anchor id="Autofit"/>
|
<anchor id="Autofit"/>
|
||||||
<section><title>Adjust column width to fit the contents</title>
|
<section><title>Adjust column width to fit the contents</title>
|
||||||
|
@ -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
|
* @return comment associated with this cell
|
||||||
*/
|
*/
|
||||||
public HSSFComment getCellComment(){
|
public HSSFComment getCellComment(){
|
||||||
if (comment == null) {
|
if (comment == null) {
|
||||||
HashMap txshapes = new HashMap(); //map shapeId and TextObjectRecord
|
comment = findCellComment(sheet, record.getRow(), record.getColumn());
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return comment;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,7 @@ public class TestHSSFComment extends TestCase {
|
|||||||
cell = row.getCell((short)0);
|
cell = row.getCell((short)0);
|
||||||
comment = cell.getCellComment();
|
comment = cell.getCellComment();
|
||||||
assertNull("Cells in the first column are not commented", comment);
|
assertNull("Cells in the first column are not commented", comment);
|
||||||
|
assertNull(sheet.getCellComment(rownum, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int rownum = 0; rownum < 3; rownum++) {
|
for (int rownum = 0; rownum < 3; rownum++) {
|
||||||
@ -108,6 +109,8 @@ public class TestHSSFComment extends TestCase {
|
|||||||
cell = row.getCell((short)1);
|
cell = row.getCell((short)1);
|
||||||
comment = cell.getCellComment();
|
comment = cell.getCellComment();
|
||||||
assertNotNull("Cells in the second column have comments", comment);
|
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(HSSFSimpleShape.OBJECT_TYPE_COMMENT, comment.getShapeType());
|
||||||
assertEquals("Yegor Kozlov", comment.getAuthor());
|
assertEquals("Yegor Kozlov", comment.getAuthor());
|
||||||
assertFalse("cells in the second column have not empyy notes",
|
assertFalse("cells in the second column have not empyy notes",
|
||||||
|
Loading…
Reference in New Issue
Block a user