Skip to content

document

document

Custom element classes that correspond to the document part, e.g. .

CT_AltChunk

Bases: BaseOxmlElement

w:altChunk element, an embedded document Word imports when it opens the file.

The r:id attribute is optional in the schema; an alt-chunk without one names no content and Word ignores it.

CT_Document

Bases: BaseOxmlElement

<w:document> element, the root element of a document.xml file.

sectPr_lst property

sectPr_lst: List[CT_SectPr]

All w:sectPr elements directly accessible from document element.

Note this does not include a sectPr child in a paragraphs wrapped in revision marks or other intervening layer, perhaps w:sdt or customXml elements.

w:sectPr elements appear in document order. The last one is always w:body/w:sectPr, all preceding are w:p/w:pPr/w:sectPr.

CT_Body

Bases: BaseOxmlElement

w:body, the container element for the main document story in document.xml.

inner_content_elements property

inner_content_elements: List[CT_P | CT_Tbl]

Generate all w:p and w:tbl elements in this document-body.

Elements appear in document order. Content inside a w:sdt (content control) wrapper is included; content shaded by nesting in a w:ins or other wrapper is not.

add_section_break

add_section_break() -> CT_SectPr

Return w:sectPr element for new section added at end of document.

The last w:sectPr becomes the second-to-last, with the new w:sectPr being an exact clone of the previous one, except that all header and footer references are removed (and are therefore now "inherited" from the prior section).

A copy of the previously-last w:sectPr will now appear in a new w:p at the end of the document. The returned w:sectPr is the sentinel w:sectPr for the document (and as implemented, is the prior sentinel w:sectPr with headers and footers removed).

Source code in src/docx/oxml/document.py
def add_section_break(self) -> CT_SectPr:
    """Return `w:sectPr` element for new section added at end of document.

    The last `w:sectPr` becomes the second-to-last, with the new `w:sectPr` being an
    exact clone of the previous one, except that all header and footer references
    are removed (and are therefore now "inherited" from the prior section).

    A copy of the previously-last `w:sectPr` will now appear in a new `w:p` at the
    end of the document. The returned `w:sectPr` is the sentinel `w:sectPr` for the
    document (and as implemented, `is` the prior sentinel `w:sectPr` with headers
    and footers removed).
    """
    # ---get the sectPr at file-end, which controls last section (sections[-1])---
    sentinel_sectPr = self.get_or_add_sectPr()
    # ---add exact copy to new `w:p` element; that is now second-to last section---
    self.add_p().set_sectPr(sentinel_sectPr.clone())
    # ---remove any header or footer references from "new" last section---
    for hdrftr_ref in sentinel_sectPr.xpath("w:headerReference|w:footerReference"):
        sentinel_sectPr.remove(hdrftr_ref)
    # ---the sentinel `w:sectPr` now controls the new last section---
    return sentinel_sectPr

clear_content

clear_content()

Remove all content child elements from this element.

Leave the element if it is present.

Source code in src/docx/oxml/document.py
def clear_content(self):
    """Remove all content child elements from this <w:body> element.

    Leave the <w:sectPr> element if it is present.
    """
    for content_elm in self.xpath("./*[not(self::w:sectPr)]"):
        self.remove(content_elm)