try to make comments table more extensible

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1895127 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2021-11-17 23:04:26 +00:00
parent 234141b8c1
commit f717f921b0
3 changed files with 30 additions and 12 deletions

View File

@ -24,6 +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;
@ -286,6 +287,29 @@ 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
*

View File

@ -3052,17 +3052,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
// also remove any comments associated with this row
if (sheetComments != null) {
CTCommentList lst = sheetComments.getCTComments().getCommentList();
for (CTComment comment : lst.getCommentArray()) {
String strRef = comment.getRef();
CellAddress ref = new CellAddress(strRef);
// is this comment part of the current row?
if(rowsToRemoveSet.contains(ref.getRow())) {
sheetComments.removeComment(ref);
vml.removeCommentShape(ref.getRow(), ref.getColumn());
}
}
sheetComments.removeCommentsFromRows(this, rowsToRemoveSet);
}
// also remove any hyperlinks associated with this row

View File

@ -314,7 +314,11 @@ public final class XSSFVMLDrawing extends POIXMLDocumentPart {
return (crow == row && ccol == col);
}
protected boolean removeCommentShape(int row, int col){
/**
* Internal use only
*/
@Internal
public boolean removeCommentShape(int row, int col){
XmlCursor cur = root.getXml().newCursor();
for (boolean found = cur.toFirstChild(); found; found = cur.toNextSibling()) {
XmlObject itm = cur.getObject();