public class CellCollection
Example:
Shows how to iterate through all tables in the document and print the contents of each cell.Document doc = new Document(getMyDir() + "Tables.docx"); TableCollection tables = doc.getFirstSection().getBody().getTables(); Assert.assertEquals(2, tables.toArray().length); for (int i = 0; i < tables.getCount(); i++) { System.out.println(MessageFormat.format("Start of Table {0}", i)); RowCollection rows = tables.get(i).getRows(); for (int j = 0; j < rows.getCount(); j++) { System.out.println(MessageFormat.format("\tStart of Row {0}", j)); CellCollection cells = rows.get(j).getCells(); for (int k = 0; k < cells.getCount(); k++) { String cellText = cells.get(k).toString(SaveFormat.TEXT).trim(); System.out.println(MessageFormat.format("\t\tContents of Cell:{0} = \"{1}\"", k, cellText)); } System.out.println(MessageFormat.format("\tEnd of Row {0}", j)); } System.out.println(MessageFormat.format("End of Table {0}\n", i)); }
Property Getters/Setters Summary | ||
---|---|---|
int | getCount() | |
Gets the number of nodes in the collection.
|
||
Cell | get(int index) | |
Retrieves a Cell at the given index.
|
Method Summary | ||
---|---|---|
void | add(Node node) | |
Adds a node to the end of the collection.
|
||
void | clear() | |
Removes all nodes from this collection and from the document.
|
||
boolean | contains(Node node) | |
Determines whether a node is in the collection.
|
||
int | indexOf(Node node) | |
Returns the zero-based index of the specified node.
|
||
void | insert(int index, Node node) | |
Inserts a node into the collection at the specified index.
|
||
java.util.Iterator<Node> | iterator() | |
Provides a simple "foreach" style iteration over the collection of nodes.
|
||
void | remove(Node node) | |
Removes the node from the collection and from the document.
|
||
void | removeAt(int index) | |
Removes the node at the specified index from the collection and from the document.
|
||
Cell[] | toArray() | |
Copies all cells from the collection to a new array of cells.
|
public int getCount()
Example:
Shows how to traverse through a composite node's collection of child nodes.Document doc = new Document(); // Add two runs and one shape as child nodes to the first paragraph of this document. Paragraph paragraph = (Paragraph) doc.getChild(NodeType.PARAGRAPH, 0, true); paragraph.appendChild(new Run(doc, "Hello world! ")); Shape shape = new Shape(doc, ShapeType.RECTANGLE); shape.setWidth(200.0); shape.setHeight(200.0); // Note that the 'CustomNodeId' is not saved to an output file and exists only during the node lifetime. shape.setCustomNodeId(100); shape.setWrapType(WrapType.INLINE); paragraph.appendChild(shape); paragraph.appendChild(new Run(doc, "Hello again!")); // Iterate through the paragraph's collection of immediate children, // and print any runs or shapes that we find within. NodeCollection children = paragraph.getChildNodes(); Assert.assertEquals(3, paragraph.getChildNodes().getCount()); for (Node child : (Iterable<Node>) children) switch (child.getNodeType()) { case NodeType.RUN: System.out.println("Run contents:"); System.out.println("\t\"{child.GetText().Trim()}\""); break; case NodeType.SHAPE: Shape childShape = (Shape) child; System.out.println("Shape:"); System.out.println("\t{childShape.ShapeType}, {childShape.Width}x{childShape.Height}"); }
Example:
Shows how to find out if a tables are nested.Document doc = new Document(getMyDir() + "Nested tables.docx"); NodeCollection tables = doc.getChildNodes(NodeType.TABLE, true); for (int i = 0; i < tables.getCount(); i++) { Table table = (Table) tables.get(i); // Find out if any cells in the table have other tables as children. int count = getChildTableCount(table); System.out.print(MessageFormat.format("Table #{0} has {1} tables directly within its cells", i, count)); // Find out if the table is nested inside another table, and, if so, at what depth. int tableDepth = getNestedDepthOfTable(table); if (tableDepth > 0) System.out.println(MessageFormat.format("Table #{0} is nested inside another table at depth of {1}", i, tableDepth)); else System.out.println(MessageFormat.format("Table #{0} is a non nested table (is not a child of another table)", i)); } } /** * Calculates what level a table is nested inside other tables. * * @returns An integer containing the level the table is nested at. * 0 = Table is not nested inside any other table * 1 = Table is nested within one parent table * 2 = Table is nested within two parent tables etc.. */ private static int getNestedDepthOfTable(final Table table) { int depth = 0; Node parent = table.getAncestor(table.getNodeType()); while (parent != null) { depth++; parent = parent.getAncestor(Table.class); } return depth; } /** * Determines if a table contains any immediate child table within its cells. * Does not recursively traverse through those tables to check for further tables. * * @returns Returns true if at least one child cell contains a table. * Returns false if no cells in the table contains a table. */ private static int getChildTableCount(final Table table) { int childTableCount = 0; for (Row row : table.getRows()) { for (Cell cell : row.getCells()) { TableCollection childTables = cell.getTables(); if (childTables.getCount() > 0) childTableCount++; } } return childTableCount; }
public Cell get(int index)
The index is zero-based.
Negative indexes are allowed and indicate access from the back of the collection. For example -1 means the last item, -2 means the second before last and so on.
If index is greater than or equal to the number of items in the list, this returns a null reference.
If index is negative and its absolute value is greater than the number of items in the list, this returns a null reference.
index
- An index into the collection.Example:
Shows how to iterate through all tables in the document and print the contents of each cell.Document doc = new Document(getMyDir() + "Tables.docx"); TableCollection tables = doc.getFirstSection().getBody().getTables(); Assert.assertEquals(2, tables.toArray().length); for (int i = 0; i < tables.getCount(); i++) { System.out.println(MessageFormat.format("Start of Table {0}", i)); RowCollection rows = tables.get(i).getRows(); for (int j = 0; j < rows.getCount(); j++) { System.out.println(MessageFormat.format("\tStart of Row {0}", j)); CellCollection cells = rows.get(j).getCells(); for (int k = 0; k < cells.getCount(); k++) { String cellText = cells.get(k).toString(SaveFormat.TEXT).trim(); System.out.println(MessageFormat.format("\t\tContents of Cell:{0} = \"{1}\"", k, cellText)); } System.out.println(MessageFormat.format("\tEnd of Row {0}", j)); } System.out.println(MessageFormat.format("End of Table {0}\n", i)); }
public void add(Node node)
The node is inserted as a child into the node object from which the collection was created.
If the newChild is already in the tree, it is first removed.
If the node being inserted was created from another document, you should use
node
- The node to be added to the end of the collection.Example:
Shows how to prepare a new section node for editing.Document doc = new Document(); // A blank document comes with a section, which has a body, which in turn has a paragraph. // We can add contents to this document by adding elements such as text runs, shapes, or tables to that paragraph. Assert.assertEquals(NodeType.SECTION, doc.getChild(NodeType.ANY, 0, true).getNodeType()); Assert.assertEquals(NodeType.BODY, doc.getSections().get(0).getChild(NodeType.ANY, 0, true).getNodeType()); Assert.assertEquals(NodeType.PARAGRAPH, doc.getSections().get(0).getBody().getChild(NodeType.ANY, 0, true).getNodeType()); // If we add a new section like this, it will not have a body, or any other child nodes. doc.getSections().add(new Section(doc)); Assert.assertEquals(0, doc.getSections().get(1).getChildNodes(NodeType.ANY, true).getCount()); // Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it. doc.getLastSection().ensureMinimum(); Assert.assertEquals(NodeType.BODY, doc.getSections().get(1).getChild(NodeType.ANY, 0, true).getNodeType()); Assert.assertEquals(NodeType.PARAGRAPH, doc.getSections().get(1).getBody().getChild(NodeType.ANY, 0, true).getNodeType()); doc.getSections().get(0).getBody().getFirstParagraph().appendChild(new Run(doc, "Hello world!")); Assert.assertEquals("Hello world!", doc.getText().trim());
public void clear()
Example:
Shows how to remove all sections from a document.Document doc = new Document(getMyDir() + "Document.docx"); // This document has one section with a few child nodes containing and displaying all the document's contents. Assert.assertEquals(1, doc.getSections().getCount()); Assert.assertEquals(19, doc.getSections().get(0).getChildNodes(NodeType.ANY, true).getCount()); Assert.assertEquals("Hello World!\r\rHello Word!\r\r\rHello World!", doc.getText().trim()); // Clear the collection of sections, which will remove all of the document's children. doc.getSections().clear(); Assert.assertEquals(0, doc.getChildNodes(NodeType.ANY, true).getCount()); Assert.assertEquals("", doc.getText().trim());
public boolean contains(Node node)
This method performs a linear search; therefore, the average execution time is proportional to Count.
node
- The node to locate.Example:
Shows how to work with a NodeCollection.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Add text to the document by inserting Runs using a DocumentBuilder. builder.write("Run 1. "); builder.write("Run 2. "); // Every invocation of the "Write()" method creates a new Run, // which then appears in the parent Paragraph's RunCollection. RunCollection runs = doc.getFirstSection().getBody().getFirstParagraph().getRuns(); Assert.assertEquals(2, runs.getCount()); // We can also insert a node into the RunCollection manually. Run newRun = new Run(doc, "Run 3. "); runs.insert(3, newRun); Assert.assertTrue(runs.contains(newRun)); Assert.assertEquals("Run 1. Run 2. Run 3.", doc.getText().trim()); // Access individual runs and remove them to remove their text from the document. Run run = runs.get(1); runs.remove(run); Assert.assertEquals("Run 1. Run 3.", doc.getText().trim()); Assert.assertNotNull(run); Assert.assertFalse(runs.contains(run));
public int indexOf(Node node)
This method performs a linear search; therefore, the average execution time is proportional to Count.
node
- The node to locate.Example:
Shows how to get the index of a node in a collection.Document doc = new Document(getMyDir() + "Tables.docx"); Table table = doc.getFirstSection().getBody().getTables().get(0); NodeCollection allTables = doc.getChildNodes(NodeType.TABLE, true); Assert.assertEquals(0, allTables.indexOf(table)); Row row = table.getRows().get(2); Assert.assertEquals(2, table.indexOf(row)); Cell cell = row.getLastCell(); Assert.assertEquals(4, row.indexOf(cell));
public void insert(int index, Node node)
The node is inserted as a child into the node object from which the collection was created.
If the index is equal to or greater than Count, the node is added at the end of the collection.
If the index is negative and its absolute value is greater than Count, the node is added at the end of the collection.
If the newChild is already in the tree, it is first removed.
If the node being inserted was created from another document, you should use
index
- The zero-based index of the node.
Negative indexes are allowed and indicate access from the back of the list.
For example -1 means the last node, -2 means the second before last and so on.node
- The node to insert.Example:
Shows how to work with a NodeCollection.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Add text to the document by inserting Runs using a DocumentBuilder. builder.write("Run 1. "); builder.write("Run 2. "); // Every invocation of the "Write()" method creates a new Run, // which then appears in the parent Paragraph's RunCollection. RunCollection runs = doc.getFirstSection().getBody().getFirstParagraph().getRuns(); Assert.assertEquals(2, runs.getCount()); // We can also insert a node into the RunCollection manually. Run newRun = new Run(doc, "Run 3. "); runs.insert(3, newRun); Assert.assertTrue(runs.contains(newRun)); Assert.assertEquals("Run 1. Run 2. Run 3.", doc.getText().trim()); // Access individual runs and remove them to remove their text from the document. Run run = runs.get(1); runs.remove(run); Assert.assertEquals("Run 1. Run 3.", doc.getText().trim()); Assert.assertNotNull(run); Assert.assertFalse(runs.contains(run));
public java.util.Iterator<Node> iterator()
public void remove(Node node)
node
- The node to remove.Example:
Shows how to work with a NodeCollection.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Add text to the document by inserting Runs using a DocumentBuilder. builder.write("Run 1. "); builder.write("Run 2. "); // Every invocation of the "Write()" method creates a new Run, // which then appears in the parent Paragraph's RunCollection. RunCollection runs = doc.getFirstSection().getBody().getFirstParagraph().getRuns(); Assert.assertEquals(2, runs.getCount()); // We can also insert a node into the RunCollection manually. Run newRun = new Run(doc, "Run 3. "); runs.insert(3, newRun); Assert.assertTrue(runs.contains(newRun)); Assert.assertEquals("Run 1. Run 2. Run 3.", doc.getText().trim()); // Access individual runs and remove them to remove their text from the document. Run run = runs.get(1); runs.remove(run); Assert.assertEquals("Run 1. Run 3.", doc.getText().trim()); Assert.assertNotNull(run); Assert.assertFalse(runs.contains(run));
public void removeAt(int index)
index
- The zero-based index of the node.
Negative indexes are allowed and indicate access from the back of the list.
For example -1 means the last node, -2 means the second before last and so on.Example:
Shows how to add and remove sections in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("Section 1"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.write("Section 2"); Assert.assertEquals("Section 1\fSection 2", doc.getText().trim()); // Delete the first section from the document. doc.getSections().removeAt(0); Assert.assertEquals("Section 2", doc.getText().trim()); // Append a copy of what is now the first section to the end of the document. int lastSectionIdx = doc.getSections().getCount() - 1; Section newSection = doc.getSections().get(lastSectionIdx).deepClone(); doc.getSections().add(newSection); Assert.assertEquals("Section 2\fSection 2", doc.getText().trim());
public Cell[] toArray()
Example:
Shows how to iterate through all tables in the document and print the contents of each cell.Document doc = new Document(getMyDir() + "Tables.docx"); TableCollection tables = doc.getFirstSection().getBody().getTables(); Assert.assertEquals(2, tables.toArray().length); for (int i = 0; i < tables.getCount(); i++) { System.out.println(MessageFormat.format("Start of Table {0}", i)); RowCollection rows = tables.get(i).getRows(); for (int j = 0; j < rows.getCount(); j++) { System.out.println(MessageFormat.format("\tStart of Row {0}", j)); CellCollection cells = rows.get(j).getCells(); for (int k = 0; k < cells.getCount(); k++) { String cellText = cells.get(k).toString(SaveFormat.TEXT).trim(); System.out.println(MessageFormat.format("\t\tContents of Cell:{0} = \"{1}\"", k, cellText)); } System.out.println(MessageFormat.format("\tEnd of Row {0}", j)); } System.out.println(MessageFormat.format("End of Table {0}\n", i)); }