mirror of https://github.com/apache/poi.git
try to make comments table more extensible
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1895128 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f717f921b0
commit
df7fccb3d0
|
@ -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
|
||||
|
@ -287,29 +308,6 @@ public class CommentsTable extends POIXMLDocumentPart implements Comments {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue