パッケージからドキュメント パーツを削除する
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
パッケージとドキュメント パーツ
WordprocessingDocument オブジェクトの取得
WordProcessingML ドキュメントの基本構造
settings 要素
サンプル コードの動作のしくみ
サンプル コード
このトピックでは、Open XML SDK 2.0 for Microsoft Office のクラスを使用して、プログラムによってワープロ ドキュメントからドキュメント パーツ (ファイル) を削除する方法について説明します。
このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。
using System;
using DocumentFormat.OpenXml.Packaging;
Imports System
Imports DocumentFormat.OpenXml.Packaging
パッケージとドキュメント パーツ
Open XML ドキュメントはパッケージとして保存されます。このパッケージの形式は、ISO/IEC 29500-2 (英語) に定義されています。パッケージの内部は、リレーションシップで結ばれた複数のパーツに分けることができます。パーツ間のリレーションシップによって、ドキュメントのカテゴリが決まります。パッケージのリレーションシップ アイテムにメイン ドキュメント パーツへのリレーションシップを含めると、そのドキュメントをワープロ ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにプレゼンテーション パーツへのリレーションシップを含めると、そのドキュメントをプレゼンテーション ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにブック パーツへのリレーションシップを含めると、そのドキュメントをスプレッドシート ドキュメントとして定義できます。このトピックでは、ワープロ ドキュメント パッケージを使用します。
WordprocessingDocument オブジェクトの取得
コード例では、まず DocumentFormat.OpenXml.Packaging.WordprocessingDocument のオーバーロードされた Open() メソッドの 1 つに引数としてファイル名を渡し、パッケージ ファイルを開きます。このメソッドは、文字列と、ファイルを読み取り/書き込みモードで開くかどうかを指定するブール値を受け取ります。この例では、ブール値を true に設定し、ファイルを読み取り/書き込みモードで開くことを指定しています。
// 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 を使用する場合は、Save および Close を明示的に呼び出す必要はありません。
WordProcessingML ドキュメントの基本構造
WordProcessingML ドキュメントの基本構造は、document 要素と body 要素、および段落を表す p などの 1 つ以上のブロック レベル要素で構成されます。段落には、1 つ以上の r 要素が含まれます。r はセクションを表します。セクションは、書式設定などの一般的なプロパティのセットを含むテキストの領域です。セクションには、1 つ以上の t 要素が含まれます。t 要素には、一連のテキストが含まれます。サンプル コードで作成されるドキュメントの WordprocessingML マークアップを次のコード例に示します。
<w:document xmlns:w="https://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.0 を使用すると、WordprocessingML の要素に対応した、厳密に型指定されたクラスを使用してドキュメント構造とコンテンツを作成できます。これらのクラスは、DocumentFormat.OpenXml.Wordprocessing 名前空間にあります。次の表に、document、body、p、r、t の各要素に対応するクラスのクラス名を示します。
WordprocessingML 要素 |
Open XML SDK 2.0 のクラス |
説明 |
---|---|---|
document |
メイン ドキュメント パーツのルート要素 |
|
body |
ISO/IEC 29500 (英語) の仕様で規定されている、段落、表、注釈などのブロック レベル構造のコンテナー |
|
p |
段落 |
|
r |
セクション |
|
t |
さまざまなテキスト |
settings 要素
ISO/IEC 29500 (英語) の仕様に記載されている次のテキストは、PresentationML パッケージの settings 要素について説明しています。
この要素は、WordprocessingML ドキュメントに適用される設定を指定します。この要素は WordprocessingML ドキュメント内のドキュメント設定パーツのルート要素です。[例: ドキュメントの設定パーツの次のような WordprocessingML を例に取ります。
<w:settings>
<w:defaultTabStop w:val="720" />
<w:characterSpacingControl w:val="dontCompress" />
</w:settings>
settings 要素には、このドキュメントのすべての設定が含まれます。この例では、defaultTabStop 要素による 0.5 インチ間隔の自動タブ位置と、characterSpacingControl 要素による文字レベルの非空白圧縮の 2 つの設定が適用されます。 例の終了]
c ISO/IEC29500: 2008.
サンプル コードの動作のしくみ
using ステートメントでドキュメントを WordprocessingDocument オブジェクトとして開いた後、DocumentSettingsPart パーツへの参照を作成します。次に、そのパーツが存在するかどうかを確認し、存在する場合は、パッケージからそのパーツを削除します。この例では、settings.xml パーツがパッケージから削除されます。
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
サンプル コード
次のコードでは、パッケージからドキュメント パーツを削除します。プログラムを実行するには、この例のように RemovePart メソッドを呼び出します。
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.0 Productivity Tool for Microsoft Office を使用してファイルを開き、ファイルの構造を確認します。プログラムを実行した後で再びファイルを確認すると、DocumentSettingsPart パーツが削除されたことがわかります。
以下は、C# および 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