[方法] リレーションシップ ID を受け取る新しいドキュメント パーツをパッケージに追加するHow to: Add a new document part that receives a relationship ID to a package

このトピックでは、Open XML SDK 2.5 for Office のクラスを使用して、ワープロ ドキュメントのリレーションシップ Id パラメーターを受け取るドキュメント パーツ (ファイル) を追加する方法について説明します。This topic shows how to use the classes in the Open XML SDK 2.5 for Office to add a document part (file) that receives a relationship Id parameter for a word processing document.

このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。The following assembly directives are required to compile the code in this topic.

    using System.IO;
    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Wordprocessing;
    using System.Xml;
    Imports System.IO
    Imports DocumentFormat.OpenXml
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing
    Imports System.Xml

パッケージとドキュメント パーツPackages and Document Parts

Open XML ドキュメントはパッケージとして保存されます。このパッケージの形式は、ISO/IEC 29500-2 に定義されています。パッケージの内部は、リレーションシップで結ばれた複数のパーツに分けることができます。パーツ間のリレーションシップによって、ドキュメントのカテゴリが決まります。パッケージのリレーションシップ アイテムにメイン ドキュメント パーツへのリレーションシップを含めると、そのドキュメントをワープロ ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにプレゼンテーション パーツへのリレーションシップを含めると、そのドキュメントをプレゼンテーション ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにブック パーツへのリレーションシップを含めると、そのドキュメントをスプレッドシート ドキュメントとして定義できます。このトピックでは、ワープロ ドキュメント パッケージを使用します。An Open XML document is stored as a package, whose format is defined by ISO/IEC 29500-2. The package can have multiple parts with relationships between them. The relationship between parts controls the category of the document. A document can be defined as a word-processing document if its package-relationship item contains a relationship to a main document part. If its package-relationship item contains a relationship to a presentation part it can be defined as a presentation document. If its package-relationship item contains a relationship to a workbook part, it is defined as a spreadsheet document. In this how-to topic, you will use a word-processing document package.


WordProcessingML ドキュメントの構造The Structure of a WordProcessingML Document

WordProcessingML ドキュメントの基本ドキュメント構造は、 document 要素と body 要素、およびそれに続く 1 つ以上のブロック レベルの要素 (段落を表す p など) で構成されます。段落には 1 つ以上の r 要素が含まれます。 r はセクションを表し、書式などの共通のプロパティ セットがあるテキストの領域です。セクションには 1 つ以上の t 要素が含まれます。 t 要素は、さまざまなテキストを含みます。次のコード例は、テキスト "Example text." を含むドキュメントの WordprocessingML マークアップを示します。The basic document structure of a WordProcessingML document consists of the document and body elements, followed by one or more block level elements such as p, which represents a paragraph. A paragraph contains one or more r elements. The r stands for run, which is a region of text with a common set of properties, such as formatting. A run contains one or more t elements. The t element contains a range of text. The following code example shows the WordprocessingML markup for a document that contains the text "Example text."

    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Example text.</w:t>
          </w:r>
        </w:p>
      </w:body>
    </w:document>

Open XML SDK 2.5 を使用すると、WordprocessingML 要素に対応する厳密に型指定されたクラスを使用してドキュメント構造とコンテンツを作成できます。Using the Open XML SDK 2.5, you can create document structure and content using strongly-typed classes that correspond to WordprocessingML elements. これらのクラスは DocumentFormat.OpenXml.Wordprocessing 名前空間にあります。You will find these classes in the DocumentFormat.OpenXml.Wordprocessing namespace. 次の表に、documentbodyprt の各要素に対応するクラスのクラス名を示します。The following table lists the class names of the classes that correspond to the document, body, p, r, and t elements.

WordprocessingML の要素WordprocessingML Element Open XML SDK 2.5 のクラスOpen XML SDK 2.5 Class 説明Description
documentdocument DocumentDocument メイン ドキュメント パーツのルート要素。The root element for the main document part.
bodybody BodyBody ISO/IEC 29500 の仕様で規定されている、段落、表、注釈などのブロック レベル構造のコンテナー。The container for the block level structures such as paragraphs, tables, annotations and others specified in the ISO/IEC 29500 specification.
pp ParagraphParagraph 段落A paragraph.
rr RunRun セクションA run.
tt TextText 一定範囲のテキストA range of text.

サンプル コードの動作のしくみHow the Sample Code Works

このサンプル コードでは、まず Word 文書のパスを表すパラメーターを渡します。次に、ドキュメントを WordprocessingDocument オブジェクトとして作成します。The sample code, in this how-to, starts by passing in a parameter that represents the path to the Word document. It then creates a document as a WordprocessingDocument object.

    public static void AddNewPart(string document)
    {
        // Create a new word processing document.
        WordprocessingDocument wordDoc = 
           WordprocessingDocument.Create(document,
           WordprocessingDocumentType.Document);
    Public Shared Sub AddNewPart(ByVal document As String)
        ' Create a new word processing document.
        Dim wordDoc As WordprocessingDocument = _
        WordprocessingDocument.Create(document, WordprocessingDocumentType.Document)

リレーションシップ ID rId1 を使用して、新しいワープロ ドキュメントに MainDocumentPart パーツを追加します。また、 CustomFilePropertiesPart パーツと CoreFilePropertiesPart パーツも新しいワープロ ドキュメントに追加します。It then adds the MainDocumentPart part in the new word processing document, with the relationship ID, rId1. It also adds the CustomFilePropertiesPart part and a CoreFilePropertiesPart in the new word processing document.

    // Add the MainDocumentPart part in the new word processing document.
    MainDocumentPart mainDocPart = wordDoc.AddNewPart<MainDocumentPart>
    ("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1");
    mainDocPart.Document = new Document();

    // Add the CustomFilePropertiesPart part in the new word processing document.
    CustomFilePropertiesPart customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
    customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();

    // Add the CoreFilePropertiesPart part in the new word processing document.
    CoreFilePropertiesPart coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();

    using (XmlTextWriter writer = 
    new XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
    {
        writer.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-
    8\"?>\r\n<cp:coreProperties xmlns:cp=\
    "http://schemas.openxmlformats.org/package/2006/metadata/core-properties\"></cp:coreProperties>");
        writer.Flush();
    }
    ' Add the MainDocumentPart part in the new word processing document.
    Dim mainDocPart As MainDocumentPart = wordDoc.AddNewPart(Of MainDocumentPart) _
    ("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1") _
    mainDocPart.Document = New Document()

    ' Add the CustomFilePropertiesPart part in the new word processing document.
    Dim customFilePropPart As CustomFilePropertiesPart = wordDoc.AddCustomFilePropertiesPart()
    customFilePropPart.Properties = New DocumentFormat.OpenXml.CustomProperties.Properties()

    ' Add the CoreFilePropertiesPart part in the new word processing document.
    Dim coreFilePropPart As CoreFilePropertiesPart = wordDoc.AddCoreFilePropertiesPart()

    Using writer As New XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8)
        writer.WriteRaw("<?xml version=""1.0"" encoding=""UTF-8""?>" _
    & vbCrLf & "<cp:coreProperties xmlns:cp=""http://schemas.openxmlformats.org/package/2006/metadata/core-properties""></cp:coreProperties>")
        writer.Flush()
    End Using

リレーションシップ ID rId4、rId5、および rId6 を使用して、 DigitalSignatureOriginPart パーツ、 ExtendedFilePropertiesPart パーツ、および ThumbnailPart パーツを新しいワープロ ドキュメントに追加します。そして wordDoc オブジェクトを閉じます。The code then adds the DigitalSignatureOriginPart part, the ExtendedFilePropertiesPart part, and the ThumbnailPart part in the new word processing document with realtionship IDs rId4, rId5, and rId6. And then it closes the wordDoc object.

    // Add the DigitalSignatureOriginPart part in the new word processing document.
    wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");

    // Add the ExtendedFilePropertiesPart part in the new word processing document.**
    ExtendedFilePropertiesPart extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
    extendedFilePropPart.Properties = new DocumentFormat.OpenXml.ExtendedProperties.Properties();

    // Add the ThumbnailPart part in the new word processing document.
    wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");

    wordDoc.Close();
    ' Add the DigitalSignatureOriginPart part in the new word processing document.
    wordDoc.AddNewPart(Of DigitalSignatureOriginPart)("rId4")

    ' Add the ExtendedFilePropertiesPart part in the new word processing document.**
    Dim extendedFilePropPart As ExtendedFilePropertiesPart = wordDoc.AddNewPart(Of ExtendedFilePropertiesPart)("rId5")
    extendedFilePropPart.Properties = New DocumentFormat.OpenXml.ExtendedProperties.Properties()

    ' Add the ThumbnailPart part in the new word processing document.
    wordDoc.AddNewPart(Of ThumbnailPart)("image/jpeg", "rId6")

    wordDoc.Close()

注意

AddNewPart<T> メソッドは、現在のドキュメント パーツから新しいドキュメント パーツへのリレーションシップを作成します。The AddNewPart<T> method creates a relationship from the current document part to the new document part. このメソッドは、新しいドキュメント パーツを返します。This method returns the new document part. DataPart.FeedData メソッドを使用してドキュメント パーツにデータを入力することもできます。Also, you can use the DataPart.FeedData method to fill the document part.


サンプル コードSample Code

以下のコードでは、カスタム XML を含む新しいドキュメント パーツを外部ファイルから追加し、そのドキュメント パーツを設定します。 AddNewPart メソッドを呼び出すには、次のコード例のような呼び出しを使用します。The following code, adds a new document part that contains custom XML from an external file and then populates the document part. You can call the method AddNewPart by using a call like the following code example.

    string document = @"C:\Users\Public\Documents\MyPkg1.docx";
    AddNewPart(document);
    Dim document As String = "C:\Users\Public\Documents\MyPkg1.docx"
    AddNewPart(document)

以下は、C# および Visual Basic の完全なコード例です。The following is the complete code example in both C# and Visual Basic.

    public static void AddNewPart(string document)
    {
        // Create a new word processing document.
        WordprocessingDocument wordDoc =
           WordprocessingDocument.Create(document,
           WordprocessingDocumentType.Document);

        // Add the MainDocumentPart part in the new word processing document.
        var mainDocPart = wordDoc.AddNewPart<MainDocumentPart>
    ("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1");
        mainDocPart.Document = new Document();

        // Add the CustomFilePropertiesPart part in the new word processing document.
        var customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
        customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();

        // Add the CoreFilePropertiesPart part in the new word processing document.
        var coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
        using (XmlTextWriter writer = new 
    XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
        {
            writer.WriteRaw("<?xml version=
    \"1.0\" encoding=\"UTF-8\"?>\r\n<cp:coreProperties xmlns:cp=\
    "http://schemas.openxmlformats.org/package/2006/metadata/core-properties\"></cp:coreProperties>");
            writer.Flush();
        }

        // Add the DigitalSignatureOriginPart part in the new word processing document.
        wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");

        // Add the ExtendedFilePropertiesPart part in the new word processing document.
        var extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
        extendedFilePropPart.Properties = 
    new DocumentFormat.OpenXml.ExtendedProperties.Properties();

        // Add the ThumbnailPart part in the new word processing document.
        wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");

        wordDoc.Close();
    }
    Public Sub AddNewPart(ByVal document As String)
        ' Create a new word processing document.
        Dim wordDoc As WordprocessingDocument = _
    WordprocessingDocument.Create(document, WordprocessingDocumentType.Document)

        ' Add the MainDocumentPart part in the new word processing document.
        Dim mainDocPart = wordDoc.AddNewPart(Of MainDocumentPart) _
    ("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1")
        mainDocPart.Document = New Document()

        ' Add the CustomFilePropertiesPart part in the new word processing document.
        Dim customFilePropPart = wordDoc.AddCustomFilePropertiesPart()
        customFilePropPart.Properties = New DocumentFormat.OpenXml.CustomProperties.Properties()

        ' Add the CoreFilePropertiesPart part in the new word processing document.
        Dim coreFilePropPart = wordDoc.AddCoreFilePropertiesPart()
        Using writer As New XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), _
    System.Text.Encoding.UTF8)
            writer.WriteRaw( _
    "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCr & vbLf & _
    "<cp:coreProperties xmlns:cp=""http://schemas.openxmlformats.org/package/2006/metadata/core-properties""></cp:coreProperties>")
            writer.Flush()
        End Using

        ' Add the DigitalSignatureOriginPart part in the new word processing document.
        wordDoc.AddNewPart(Of DigitalSignatureOriginPart)("rId4")

        ' Add the ExtendedFilePropertiesPart part in the new word processing document.
        Dim extendedFilePropPart = wordDoc.AddNewPart(Of ExtendedFilePropertiesPart)("rId5")
        extendedFilePropPart.Properties = _
    New DocumentFormat.OpenXml.ExtendedProperties.Properties()

        ' Add the ThumbnailPart part in the new word processing document.
        wordDoc.AddNewPart(Of ThumbnailPart)("image/jpeg", "rId6")

        wordDoc.Close()
    End Sub

関連項目See also

その他のリソースOther resources

Open XML SDK 2.5 クラス ライブラリ リファレンスOpen XML SDK 2.5 class library reference