AltChunk Class

Anchor for Imported External Content

Inheritance Hierarchy


Namespace:  DocumentFormat.OpenXml.Wordprocessing
Assembly:  DocumentFormat.OpenXml (in DocumentFormat.OpenXml.dll)


<ChildElementInfoAttribute(GetType(AltChunkProperties))> _
Public Class AltChunk _
    Inherits OpenXmlCompositeElement
Dim instance As AltChunk
public class AltChunk : OpenXmlCompositeElement


The following table lists the possible child types:

  • AltChunkProperties <w:altChunkPr>

[ISO/IEC 29500-1 1st Edition] altChunk (Anchor for Imported External Content)

This element specifies a location within a document for the insertion of the contents of a specified file containing external content to be imported into the main WordprocessingML document. The specified file's contents should appear at the specified location within the document, and can henceforth be emitted as regular WordprocessingML without distinction to its origin. The location of the external content to be imported shall be specified by the relationship whose Id attribute matches the id attribute on this element.

If the relationship type of the relationship specified by this element is not, is not present, or does not have a TargetMode attribute value of Internal, then the document shall be considered non-conformant. If an application cannot process external content of the content type specified by the targeted part, then it should ignore the specified alternate content but continue to process the file. If possible, it should also provide some indication that unknown content was not imported.

[Example: Consider a WordprocessingML document consisting of contents which must be imported from the following HTML document:

<html … >
<body style="margin-left:200px;margin-top:50px">
<p>Paragraph one.</p>
<blockquote style="border:5px solid #00FFFF">Paragraph in a blockquote.</blockquote>
<p>Paragraph two.</p>

The resulting WordprocessingML host document would consist of its own WordprocessingML content as well as an external content import anchor in the appropriate location:

<w:altChunk r:id="altChunk1" />

The altChunk element specifies that the external content targeted by the relationship with an ID of altChunk1 must be imported at the beginning of the document. Examining the contents of the corresponding relationship part item, we can see the targets for that relationship:

<Relationships … >
<Relationship Id="altChunk1" TargetMode="Internal" Type="" Target="import.htm" />

The corresponding relationship part item shows that the file to be imported is located next to the main document and is named import.htm. end example]

Parent Elements

body (§17.2.2); comment (§; docPartBody (§17.12.6); endnote (§17.11.2); footnote (§17.11.10); ftr (§17.10.3); hdr (§17.10.4); tc (§17.4.66)

Child Elements


altChunkPr (External Content Import Properties)




id (Relationship to Part)

Namespace: .../officeDocument/2006/relationships

Specifies the relationship ID to a specified part containing alternate content for import.

If the specified relationship does not match the relationship type required by the parent element, then this document shall be considered to be non-conformant.

[Example: Consider an XML element which has the following id attribute:

<… r:id="rId10" />

The markup specifies the associated relationship part with relationship ID rId1 contains the corresponding relationship information for the parent XML element. end example]

The possible values for this attribute are defined by the ST_RelationshipId simple type (§

[Note: The W3C XML Schema definition of this element’s content model (CT_AltChunk) is located in §A.1. end note]

© ISO/IEC29500: 2008.


The following example shows how to merge two word-processing documents using altChunk. The example inserts the content of the file (source.docx) into another file (Destination.docx). After running the example, examine the contents the file “Destination.docx.” You will notice that the contents of the source file are inserted right after the text that was originally in the file. Notice also that the code example starts by deleting the file “Destination.docx” and creates a fresh one. This is to avoid the ID conflict when you run the code more than once.

using System.Linq;
using System.IO;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace altChunk
    class Program
        static void Main(string[] args)
            string fileName1 = @"c:\Users\Public\Documents\Destination.docx";
            string fileName2 = @"c:\Users\Public\Documents\Source.docx";
            string testFile = @"c:\Users\Public\Documents\Test.docx";
            File.Copy(testFile, fileName1);
            using (WordprocessingDocument myDoc =
                WordprocessingDocument.Open(fileName1, true))
                string altChunkId = "AltChunkId1";
                MainDocumentPart mainPart = myDoc.MainDocumentPart;
                AlternativeFormatImportPart chunk = 
                    AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                using (FileStream fileStream = File.Open(fileName2, FileMode.Open))
                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;
                    .InsertAfter(altChunk, mainPart.Document.Body
Imports System.Linq
Imports System.IO
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Wordprocessing

Module Module1
    Sub Main(ByVal args As String())
        Dim fileName1 As String = "c:\Users\Public\Documents\Destination.docx"
        Dim fileName2 As String = "c:\Users\Public\Documents\Source.docx"
        Dim testFile As String = "c:\Users\Public\Documents\Test.docx"
        File.Copy(testFile, fileName1)
        Using myDoc As WordprocessingDocument = WordprocessingDocument.Open(fileName1, True)
            Dim altChunkId As String = "AltChunkId1"
            Dim mainPart As MainDocumentPart = myDoc.MainDocumentPart
            Dim chunk As AlternativeFormatImportPart = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId)
            Using fileStream As FileStream = File.Open(fileName2, FileMode.Open)
            End Using
            Dim altChunk As New AltChunk()
            altChunk.Id = altChunkId
            mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements(Of Paragraph)().Last())
        End Using
    End Sub
End Module

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also


AltChunk Members

DocumentFormat.OpenXml.Wordprocessing Namespace