}
}
- /**
- * @param sheet the sheet to check for comments (used to find drawing/shape data for comments) - set to null
- * if you don't need the drawing/shape data
- * @return iterator of comments
- * @since POI 5.2.0
- */
- @Override
- public Iterator<XSSFComment> commentIterator(Sheet sheet) {
- XSSFVMLDrawing vml = getVMLDrawing(sheet, false);
- final CommentsTable table = this;
- return new Iterator<XSSFComment>() {
- private final CTComment[] commentsArray = getCTComments().getCommentList().getCommentArray();
- private int counter = 0;
-
- @Override
- public boolean hasNext() {
- return counter < commentsArray.length;
- }
-
- @Override
- public XSSFComment next() {
- CTComment ctComment = commentsArray[counter++];
- CellAddress cellAddress = new CellAddress(ctComment.getRef());
- CTShape shape = null;
- if (vml != null) {
- shape = vml.findCommentShape(cellAddress.getRow(), cellAddress.getColumn());
- }
- return new XSSFComment(table, ctComment, shape);
- }
- };
- }
-
/**
* Called after the reference is updated, so that
* we can reflect that in our cache
// is there a change necessary for the current row?
if(newrownum != rownum) {
- Iterator<XSSFComment> commentIterator = sheetComments.commentIterator(this);
- while (commentIterator.hasNext()) {
- XSSFComment oldComment = commentIterator.next();
- CellReference ref = new CellReference(oldComment.getRow(), oldComment.getColumn());
+ Iterator<CellAddress> commentAddressIterator = sheetComments.getCellAddresses();
+ while (commentAddressIterator.hasNext()) {
+ CellAddress cellAddress = commentAddressIterator.next();
// is this comment part of the current row?
- if(ref.getRow() == rownum) {
- XSSFComment xssfComment = new XSSFComment(sheetComments, oldComment.getCTComment(),
- oldComment.getCTShape());
-
- // we should not perform the shifting right here as we would then find
- // already shifted comments and would shift them again...
- commentsToShift.put(xssfComment, newrownum);
+ if(cellAddress.getRow() == rownum) {
+ XSSFComment oldComment = sheetComments.findCellComment(this, cellAddress);
+ if (oldComment != null) {
+ XSSFComment xssfComment = new XSSFComment(sheetComments, oldComment.getCTComment(),
+ oldComment.getCTShape());
+
+ // we should not perform the shifting right here as we would then find
+ // already shifted comments and would shift them again...
+ commentsToShift.put(xssfComment, newrownum);
+ }
}
}
}
if (sheetComments != null) {
- Iterator<XSSFComment> commentIterator = sheetComments.commentIterator(this);
- while (commentIterator.hasNext()) {
- XSSFComment oldComment = commentIterator.next();
- CellReference ref = new CellReference(oldComment.getRow(), oldComment.getColumn());
+ Iterator<CellAddress> commentAddressIterator = sheetComments.getCellAddresses();
+ while (commentAddressIterator.hasNext()) {
+ CellAddress oldCommentAddress = commentAddressIterator.next();
- int columnIndex =ref.getCol();
+ int columnIndex = oldCommentAddress.getColumn();
int newColumnIndex = shiftedRowNum(startColumnIndex, endColumnIndex, n, columnIndex);
- if(newColumnIndex != columnIndex){
- XSSFComment xssfComment = new XSSFComment(sheetComments, oldComment.getCTComment(),
- vml == null ? null : vml.findCommentShape(ref.getRow(), columnIndex));
- commentsToShift.put(xssfComment, newColumnIndex);
+ if(newColumnIndex != columnIndex) {
+ XSSFComment oldComment = sheetComments.findCellComment(this, oldCommentAddress);
+ if (oldComment != null) {
+ XSSFComment xssfComment = new XSSFComment(sheetComments, oldComment.getCTComment(),
+ oldComment.getCTShape());
+ commentsToShift.put(xssfComment, newColumnIndex);
+ }
}
}
}