[方法] パッケージからドキュメント パーツを削除する (Open XML SDK)How to: Remove a document part from a package (Open XML SDK)

このトピックでは、Open XML SDK 2.5 for Office のクラスを使用して、プログラムによってワープロ ドキュメントからドキュメント パーツ (ファイル) を削除する方法について説明します。This topic shows how to use the classes in the Open XML SDK 2.5 for Office to remove a document part (file) from a Wordprocessing document programmatically.

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

    using System;
    using DocumentFormat.OpenXml.Packaging;
    Imports System
    Imports DocumentFormat.OpenXml.Packaging

パッケージとドキュメント パーツ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.


WordprocessingDocument オブジェクトの取得Getting a WordprocessingDocument Object

コード例では、まず DocumentFormat.OpenXml.Packaging.WordprocessingDocument のオーバーロードされた Open() メソッドの 1 つに引数としてファイル名を渡し、パッケージ ファイルを開きます。このメソッドは、文字列と、ファイルを読み取り/書き込みモードで開くかどうかを指定するブール値を受け取ります。The code example starts with opening a package file by passing a file name as an argument to one of the overloaded Open() methods of the DocumentFormat.OpenXml.Packaging.WordprocessingDocument that takes a string and a Boolean value that specifies whether the file should be opened in read/write mode or not. この例では、ブール値を true に設定し、ファイルを読み取り/書き込みモードで開くことを指定しています。In this case, the Boolean value is true specifying that the file should be opened in read/write mode.

    // Open a Wordprocessing document for editing.
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
          // Insert other code here.
    }
    ' Open a Wordprocessing document for editing.
    Using wordDoc As WordprocessingDocument = WordprocessingDocument.Open(document, True)
        ' Insert other code here.
    End Using

using ステートメントを、通常の .Create, .Save, .Close シーケンスの代わりに使用することをお勧めします。このステートメントを使用すると、閉じかっこに達したときに Dispose メソッド (リソースをクリーンアップするために Open XML SDK で使用される内部メソッド) が自動的に呼び出されます。 using ステートメントに続くブロックは、 using ステートメントで作成または指定されたオブジェクト (この例では wordDoc) のスコープを設定します。Open XML SDK の WordprocessingDocument クラスは System.IDisposable 実装の一部として自動的にオブジェクトを保存して閉じるため、また、 Dispose メソッドがブロックの終わりで自動的に呼び出されるため、 using を使用する場合は、 SaveClose を明示的に呼び出す必要はありません。The using statement provides a recommended alternative to the typical .Create, .Save, .Close sequence. It ensures that the Dispose method (internal method used by the Open XML SDK to clean up resources) is automatically called when the closing brace is reached. The block that follows the using statement establishes a scope for the object that is created or named in the using statement, in this case wordDoc. Because the WordprocessingDocument class in the Open XML SDK automatically saves and closes the object as part of its System.IDisposable implementation, and because the Dispose method is automatically called when you exit the block; you do not have to explicitly call Save and Close─as long as you use using.


WordProcessingML ドキュメントの基本構造Basic Structure of a WordProcessingML Document

WordProcessingML ドキュメントの基本構造は、 document 要素と body 要素、および段落を表す p などの 1 つ以上のブロック レベル要素で構成されます。段落には、1 つ以上の r 要素が含まれます。 r はセクションを表します。セクションは、書式設定などの一般的なプロパティのセットを含むテキストの領域です。セクションには、1 つ以上の t 要素が含まれます。 t 要素には、一連のテキストが含まれます。サンプル コードで作成されるドキュメントの 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 WordprocessingML markup for the document that the sample code creates is shown in the following code example.

    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Create text in body - CreateWordprocessingDocument</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 can 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.

settings 要素Settings Element

ISO/IEC 29500 仕様書では、PresentationML パッケージの settings 要素について次のように説明しています。The following text from the ISO/IEC 29500 specification introduces the settings element in a PresentationML package.

この要素は、WordprocessingML ドキュメントに適用される設定を指定します。This element specifies the settings that are applied to a WordprocessingML document. この要素は、WordprocessingML ドキュメント内のドキュメント設定パーツのルート要素です。This element is the root element of the Document Settings part in a WordprocessingML document.
: ドキュメントの設定パーツ向けに次の WordprocessingML フラグメントを検討します。Example: Consider the following WordprocessingML fragment for the settings part of a document:

    <w:settings>
      <w:defaultTabStop w:val="720" />
      <w:characterSpacingControl w:val="dontCompress" />
    </w:settings>

settings 要素には、このドキュメントのすべての設定が含まれます。The settings element contains all of the settings for this document. この例では、defaultTabStop 要素による 0.5 インチ間隔の自動タブ位置と、characterSpacingControl 要素による文字レベルの非空白圧縮の 2 つの設定が適用されます。In this case, the two settings applied are automatic tab stop increments of 0.5" using the defaultTabStop element, and no character level white space compression using the characterSpacingControl element.

© ISO/IEC29500: 2008.© ISO/IEC29500: 2008.


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

using ステートメントでドキュメントを WordprocessingDocument オブジェクトとして開いた後、 DocumentSettingsPart パーツへの参照を作成します。次に、そのパーツが存在するかどうかを確認し、存在する場合は、パッケージからそのパーツを削除します。この例では、 settings.xml パーツがパッケージから削除されます。After you have opened the document, in the using statement, as a WordprocessingDocument object, you create a reference to the DocumentSettingsPart part. You can then check if that part exists, if so, delete that part from the package. In this instance, the settings.xml part is removed from the package.

    MainDocumentPart mainPart = wordDoc.MainDocumentPart;
    if (mainPart.DocumentSettingsPart != null)
    {
        mainPart.DeletePart(mainPart.DocumentSettingsPart);
    }
    Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
    If mainPart.DocumentSettingsPart IsNot Nothing Then
        mainPart.DeletePart(mainPart.DocumentSettingsPart)
    End If

サンプル コードSample Code

次のコードでは、パッケージからドキュメント パーツを削除します。プログラムを実行するには、この例のように RemovePart メソッドを呼び出します。The following code removes a document part from a package. To run the program, call the method RemovePart like this example.

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

注意

たとえば、テスト ファイル "MyPkg6.docs" でプログラムを実行する前に、Open XML SDK 2.5 Productivity Tool for Microsoft Office を使用してファイルを開き、その構造を検査します。Before running the program on the test file, "MyPkg6.docs," for example, open the file by using the Open XML SDK 2.5 Productivity Tool for Microsoft Office and examine its structure. プログラムを実行した後、ファイルをもう一度検査すると、DocumentSettingsPart パーツが削除されていることが確認できます。After running the program, examine the file again, and you will notice that the DocumentSettingsPart part was removed.

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

    // To remove a document part from a package.
    public static void RemovePart(string document)
    {
      using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
      {
         MainDocumentPart mainPart = wordDoc.MainDocumentPart;
         if (mainPart.DocumentSettingsPart != null)
         {
            mainPart.DeletePart(mainPart.DocumentSettingsPart);
         }
      }
    }
    ' To remove a document part from a package.
    Public Sub RemovePart(ByVal document As String)
       Dim wordDoc As WordprocessingDocument = WordprocessingDocument.Open(document, true)
       Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
       If (Not (mainPart.DocumentSettingsPart) Is Nothing) Then
          mainPart.DeletePart(mainPart.DocumentSettingsPart)
       End If
    End Sub

関連項目See also

その他のリソースOther resources

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