diff options
author | PJ Fanning <fanningpj@apache.org> | 2021-11-17 23:26:31 +0000 |
---|---|---|
committer | PJ Fanning <fanningpj@apache.org> | 2021-11-17 23:26:31 +0000 |
commit | df7fccb3d0dc40c48b98e5f9fee366792eef786a (patch) | |
tree | 40045967baac3ace9d04b2bc94c2f65e32457c41 /poi-ooxml | |
parent | f717f921b0b185da63b4e357d51aa42bf2312a92 (diff) | |
download | poi-df7fccb3d0dc40c48b98e5f9fee366792eef786a.tar.gz poi-df7fccb3d0dc40c48b98e5f9fee366792eef786a.zip |
try to make comments table more extensible
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1895128 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi-ooxml')
3 files changed, 38 insertions, 31 deletions
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java index bb7b65082b..f0ab8deb61 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java @@ -24,9 +24,7 @@ import java.io.OutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.Set; -import com.microsoft.schemas.vml.CTShape; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.ss.util.CellAddress; @@ -97,6 +95,29 @@ public class CommentsTable extends POIXMLDocumentPart implements Comments { writeTo(out); out.close(); } + + /** + * @return iterator of comments + * @since POI 5.2.0 + */ + public Iterator<XSSFComment> commentIterator() { + 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++]; + return new XSSFComment(table, ctComment, null); + } + }; + } /** * Called after the reference is updated, so that @@ -288,29 +309,6 @@ public class CommentsTable extends POIXMLDocumentPart implements Comments { } /** - * Remove the comment at cellRef location, if one exists - * - * @param rowNums the rows for which all comments will be removed - * @since POI 5.2.0 - */ - public void removeCommentsFromRows(XSSFSheet sheet, Set<Integer> rowNums) { - CTCommentList lst = getCTComments().getCommentList(); - XSSFVMLDrawing vml = sheet.getVMLDrawing(false); - for (CTComment comment : lst.getCommentArray()) { - String strRef = comment.getRef(); - CellAddress ref = new CellAddress(strRef); - - // is this comment part of the current row? - if(rowNums.contains(ref.getRow())) { - removeComment(ref); - if (vml != null) { - vml.removeCommentShape(ref.getRow(), ref.getColumn()); - } - } - } - } - - /** * Returns the underlying CTComments list xmlbean * * @return underlying comments list xmlbean diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index d9b4331885..11fc454a24 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -3052,7 +3052,20 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { // also remove any comments associated with this row if (sheetComments != null) { - sheetComments.removeCommentsFromRows(this, rowsToRemoveSet); + Iterator<XSSFComment> commentIterator = sheetComments.commentIterator(); + while (commentIterator.hasNext()) { + XSSFComment comment = commentIterator.next(); + CellAddress ref = comment.getAddress(); + + // is this comment part of the current row? + if(rowsToRemoveSet.contains(ref.getRow())) { + sheetComments.removeComment(ref); + if (vml != null) { + vml.removeCommentShape(ref.getRow(), ref.getColumn()); + } + } + + } } // also remove any hyperlinks associated with this row diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java index e09504c725..640534354a 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java @@ -314,11 +314,7 @@ public final class XSSFVMLDrawing extends POIXMLDocumentPart { return (crow == row && ccol == col); } - /** - * Internal use only - */ - @Internal - public boolean removeCommentShape(int row, int col){ + protected boolean removeCommentShape(int row, int col){ XmlCursor cur = root.getXml().newCursor(); for (boolean found = cur.toFirstChild(); found; found = cur.toNextSibling()) { XmlObject itm = cur.getObject(); |