add new public method to expose cell addresses that have comments
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1837082 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6e0a009b8f
commit
bfc79d5169
@ -18,6 +18,7 @@ package org.apache.poi.xssf.eventusermodel;
|
||||
|
||||
import static org.apache.poi.xssf.usermodel.XSSFRelation.NS_SPREADSHEETML;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
@ -115,7 +116,7 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
||||
*/
|
||||
public XSSFSheetXMLHandler(
|
||||
Styles styles,
|
||||
CommentsTable comments,
|
||||
Comments comments,
|
||||
SharedStrings strings,
|
||||
SheetContentsHandler sheetContentsHandler,
|
||||
DataFormatter dataFormatter,
|
||||
@ -159,11 +160,11 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
||||
this(styles, strings, sheetContentsHandler, new DataFormatter(), formulasNotResults);
|
||||
}
|
||||
|
||||
private void init(CommentsTable commentsTable) {
|
||||
private void init(Comments commentsTable) {
|
||||
if (commentsTable != null) {
|
||||
commentCellRefs = new LinkedList<>();
|
||||
for (CellAddress cellAddress : commentsTable.getCellComments().keySet()) {
|
||||
commentCellRefs.add(cellAddress);
|
||||
for (Iterator<CellAddress> iter = commentsTable.getCellAddresses(); iter.hasNext(); ) {
|
||||
commentCellRefs.add(iter.next());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor
|
||||
public void processSheet(
|
||||
SheetContentsHandler sheetContentsExtractor,
|
||||
Styles styles,
|
||||
CommentsTable comments,
|
||||
Comments comments,
|
||||
SharedStrings strings,
|
||||
InputStream sheetInputStream)
|
||||
throws IOException, SAXException {
|
||||
@ -277,7 +277,7 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor
|
||||
text.append(iter.getSheetName());
|
||||
text.append('\n');
|
||||
}
|
||||
CommentsTable comments = includeCellComments ? iter.getSheetComments() : null;
|
||||
Comments comments = includeCellComments ? iter.getSheetComments() : null;
|
||||
processSheet(sheetExtractor, styles, comments, strings, stream);
|
||||
if (includeHeadersFooters) {
|
||||
sheetExtractor.appendHeaderText(text);
|
||||
|
@ -19,6 +19,8 @@ package org.apache.poi.xssf.model;
|
||||
import org.apache.poi.ss.util.CellAddress;
|
||||
import org.apache.poi.xssf.usermodel.XSSFComment;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* An interface exposing useful functions for dealing with Excel Workbook Comments.
|
||||
* It is intended that this interface should support low level access and not expose
|
||||
@ -49,4 +51,11 @@ public interface Comments {
|
||||
* @return returns true if a comment was removed
|
||||
*/
|
||||
boolean removeComment(CellAddress cellRef);
|
||||
|
||||
/**
|
||||
* Returns all cell addresses that have comments.
|
||||
* @return An iterator to traverse all cell addresses that have comments.
|
||||
* @since 4.0.0
|
||||
*/
|
||||
Iterator<CellAddress> getCellAddresses();
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
@ -30,6 +31,7 @@ import org.apache.poi.ooxml.POIXMLDocumentPart;
|
||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||
import org.apache.poi.ss.util.CellAddress;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.util.Removal;
|
||||
import org.apache.poi.xssf.usermodel.XSSFComment;
|
||||
import org.apache.xmlbeans.XmlException;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
|
||||
@ -157,17 +159,31 @@ public class CommentsTable extends POIXMLDocumentPart implements Comments {
|
||||
// Return the comment, or null if not known
|
||||
return commentRefs.get(cellRef);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns all cell addresses that have comments.
|
||||
* @return An iterator to traverse all cell addresses that have comments.
|
||||
* @since 4.0.0
|
||||
*/
|
||||
@Override
|
||||
public Iterator<CellAddress> getCellAddresses() {
|
||||
prepareCTCommentCache();
|
||||
return commentRefs.keySet().iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all cell comments on this sheet.
|
||||
* @return A map of each Comment in this sheet, keyed on the cell address where
|
||||
* the comment is located.
|
||||
* @deprecated use <code>getCellAddresses</code> instead
|
||||
*/
|
||||
@Removal(version = "4.2")
|
||||
@Deprecated
|
||||
public Map<CellAddress, XSSFComment> getCellComments() {
|
||||
prepareCTCommentCache();
|
||||
final TreeMap<CellAddress, XSSFComment> map = new TreeMap<>();
|
||||
|
||||
for (final Entry<CellAddress, CTComment> e: commentRefs.entrySet()) {
|
||||
for (final Entry<CellAddress, CTComment> e : commentRefs.entrySet()) {
|
||||
map.put(e.getKey(), new XSSFComment(this, e.getValue(), null));
|
||||
}
|
||||
|
||||
|
@ -845,7 +845,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||
}
|
||||
// the cell comments in sheetComments.getCellComments() do not have the client anchors set
|
||||
Map<CellAddress, XSSFComment> map = new HashMap<>();
|
||||
for(CellAddress address : sheetComments.getCellComments().keySet()) {
|
||||
for(Iterator<CellAddress> iter = sheetComments.getCellAddresses(); iter.hasNext(); ) {
|
||||
CellAddress address = iter.next();
|
||||
map.put(address, getCellComment(address));
|
||||
}
|
||||
return map;
|
||||
|
Loading…
Reference in New Issue
Block a user