Cell

Cell class

Represents a table cell. To learn more, visit the Working with Tables documentation article.

class Cell : public Aspose::Words::CompositeNode,
             public Aspose::Words::ICellAttrSource,
             public Aspose::Words::Revisions::ITrackableNode

Methods

Method Description
Accept(System::SharedPtr<Aspose::Words::DocumentVisitor>) override Accepts a visitor.
AppendChild(const System::SharedPtr<Aspose::Words::Node>&) Adds the specified node to the end of the list of child nodes for this node.
Cell(const System::SharedPtr<Aspose::Words::DocumentBase>&) Initializes a new instance of the Cell class.
Clone(bool) Creates a duplicate of the node.
EnsureMinimum() If the last child is not a paragraph, creates and appends one empty paragraph.
get_CellFormat() Provides access to the formatting properties of the cell.
get_ChildNodes() Gets all immediate child nodes of this node.
get_Count() Gets the number of immediate children of this node.
get_CustomNodeId() const Specifies custom node identifier.
virtual get_Document() const Gets the document to which this node belongs.
get_FirstChild() const Gets the first child of the node.
get_FirstParagraph() Gets the first paragraph among the immediate children.
get_HasChildNodes() Returns true if this node has any child nodes.
get_IsComposite() override Returns true as this node can have child nodes.
get_IsFirstCell() True if this is the first cell inside a row; false otherwise.
get_IsLastCell() True if this is the last cell inside a row; false otherwise.
get_LastChild() const Gets the last child of the node.
get_LastParagraph() Gets the last paragraph among the immediate children.
get_NextSibling() Gets the node immediately following this node.
get_NodeType() const override Returns Cell.
get_Paragraphs() Gets a collection of paragraphs that are immediate children of the cell.
get_ParentNode() Gets the immediate parent of this node.
get_ParentRow() Returns the parent row of the cell.
get_PreviousSibling() Gets the node immediately preceding this node.
get_Range() Returns a Range object that represents the portion of a document that is contained in this node.
get_Tables() Gets a collection of tables that are immediate children of the cell.
GetAncestor(Aspose::Words::NodeType) Gets the first ancestor of the specified NodeType.
GetAncestorOf()
GetChild(Aspose::Words::NodeType, int32_t, bool) Returns an Nth child node that matches the specified type.
GetChildNodes(Aspose::Words::NodeType, bool) Returns a live collection of child nodes that match the specified type.
GetEnumerator() override Provides support for the for each style iteration over the child nodes of this node.
GetText() override Gets the text of this node and of all its children.
GetType() const override
IndexOf(const System::SharedPtr<Aspose::Words::Node>&) Returns the index of the specified child node in the child node array.
InsertAfter(const System::SharedPtr<Aspose::Words::Node>&, const System::SharedPtr<Aspose::Words::Node>&) Inserts the specified node immediately after the specified reference node.
InsertBefore(const System::SharedPtr<Aspose::Words::Node>&, const System::SharedPtr<Aspose::Words::Node>&) Inserts the specified node immediately before the specified reference node.
Is(const System::TypeInfo&) const override
NextPreOrder(const System::SharedPtr<Aspose::Words::Node>&) Gets next node according to the pre-order tree traversal algorithm.
static NodeTypeToString(Aspose::Words::NodeType) A utility method that converts a node type enum value into a user friendly string.
PrependChild(const System::SharedPtr<Aspose::Words::Node>&) Adds the specified node to the beginning of the list of child nodes for this node.
PreviousPreOrder(const System::SharedPtr<Aspose::Words::Node>&) Gets the previous node according to the pre-order tree traversal algorithm.
Remove() Removes itself from the parent.
RemoveAllChildren() Removes all the child nodes of the current node.
RemoveChild(const System::SharedPtr<Aspose::Words::Node>&) Removes the specified child node.
RemoveSmartTags() Removes all SmartTag descendant nodes of the current node.
SelectNodes(const System::String&) Selects a list of nodes matching the XPath expression.
SelectSingleNode(const System::String&) Selects the first Node that matches the XPath expression.
set_CustomNodeId(int32_t) Setter for Aspose::Words::Node::get_CustomNodeId.
SetTemplateWeakPtr(uint32_t) override
ToString(Aspose::Words::SaveFormat) Exports the content of the node into a string in the specified format.
ToString(const System::SharedPtr<Aspose::Words::Saving::SaveOptions>&) Exports the content of the node into a string using the specified save options.
static Type()

Remarks

Cell can only be a child of a Row.

Cell can contain block-level nodes Paragraph and Table.

A minimal valid cell needs to have at least one Paragraph.

Examples

Shows how to create a table.

auto doc = MakeObject<Document>();
auto table = MakeObject<Table>(doc);
doc->get_FirstSection()->get_Body()->AppendChild(table);

// Tables contain rows, which contain cells, which may have paragraphs
// with typical elements such as runs, shapes, and even other tables.
// Calling the "EnsureMinimum" method on a table will ensure that
// the table has at least one row, cell, and paragraph.
auto firstRow = MakeObject<Row>(doc);
table->AppendChild(firstRow);

auto firstCell = MakeObject<Cell>(doc);
firstRow->AppendChild(firstCell);

auto paragraph = MakeObject<Paragraph>(doc);
firstCell->AppendChild(paragraph);

// Add text to the first call in the first row of the table.
auto run = MakeObject<Run>(doc, u"Hello world!");
paragraph->AppendChild(run);

doc->Save(ArtifactsDir + u"Table.CreateTable.docx");

Shows how to iterate through all tables in the document and print the contents of each cell.

auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
SharedPtr<TableCollection> tables = doc->get_FirstSection()->get_Body()->get_Tables();

ASSERT_EQ(2, tables->ToArray()->get_Length());

for (int i = 0; i < tables->get_Count(); i++)
{
    std::cout << "Start of Table " << i << std::endl;

    SharedPtr<RowCollection> rows = tables->idx_get(i)->get_Rows();

    // We can use the "ToArray" method on a row collection to clone it into an array.
    ASPOSE_ASSERT_EQ(rows, rows->ToArray());
    ASPOSE_ASSERT_NS(rows, rows->ToArray());

    for (int j = 0; j < rows->get_Count(); j++)
    {
        std::cout << "\tStart of Row " << j << std::endl;

        SharedPtr<CellCollection> cells = rows->idx_get(j)->get_Cells();

        // We can use the "ToArray" method on a cell collection to clone it into an array.
        ASPOSE_ASSERT_EQ(cells, cells->ToArray());
        ASPOSE_ASSERT_NS(cells, cells->ToArray());

        for (int k = 0; k < cells->get_Count(); k++)
        {
            String cellText = cells->idx_get(k)->ToString(SaveFormat::Text).Trim();
            std::cout << "\t\tContents of Cell:" << k << " = \"" << cellText << "\"" << std::endl;
        }

        std::cout << "\tEnd of Row " << j << std::endl;
    }

    std::cout << "End of Table " << i << "\n" << std::endl;
}

Shows how to build a nested table without using a document builder.

void CreateNestedTable()
{
    auto doc = MakeObject<Document>();

    // Create the outer table with three rows and four columns, and then add it to the document.
    SharedPtr<Table> outerTable = CreateTable(doc, 3, 4, u"Outer Table");
    doc->get_FirstSection()->get_Body()->AppendChild(outerTable);

    // Create another table with two rows and two columns and then insert it into the first table's first cell.
    SharedPtr<Table> innerTable = CreateTable(doc, 2, 2, u"Inner Table");
    outerTable->get_FirstRow()->get_FirstCell()->AppendChild(innerTable);

    doc->Save(ArtifactsDir + u"Table.CreateNestedTable.docx");
}

static SharedPtr<Table> CreateTable(SharedPtr<Document> doc, int rowCount, int cellCount, String cellText)
{
    auto table = MakeObject<Table>(doc);

    for (int rowId = 1; rowId <= rowCount; rowId++)
    {
        auto row = MakeObject<Row>(doc);
        table->AppendChild(row);

        for (int cellId = 1; cellId <= cellCount; cellId++)
        {
            auto cell = MakeObject<Cell>(doc);
            cell->AppendChild(MakeObject<Paragraph>(doc));
            cell->get_FirstParagraph()->AppendChild(MakeObject<Run>(doc, cellText));

            row->AppendChild(cell);
        }
    }

    // You can use the "Title" and "Description" properties to add a title and description respectively to your table.
    // The table must have at least one row before we can use these properties.
    // These properties are meaningful for ISO / IEC 29500 compliant .docx documents (see the OoxmlCompliance class).
    // If we save the document to pre-ISO/IEC 29500 formats, Microsoft Word ignores these properties.
    table->set_Title(u"Aspose table title");
    table->set_Description(u"Aspose table description");

    return table;
}

See Also