パッケージを作成する
このトピックでは、Open XML SDK for Office のクラスを使用して、コンテンツから XML マークアップの形式でプログラムによってワープロ ドキュメント パッケージ WordprocessingML
作成する方法について説明します。
パッケージとドキュメント パーツ
Open XML ドキュメントはパッケージとして格納され、その形式は ISO/IEC 29500 によって定義されます。 パッケージには、それらの間のリレーションシップを持つ複数のパーツを含めることができます。 パーツ間の関係によって、ドキュメントのカテゴリが制御されます。 ドキュメントは、パッケージリレーションシップアイテムにメインドキュメントパーツとの関係が含まれている場合、ワープロドキュメントとして定義できます。 パッケージリレーションシップ項目にプレゼンテーション パーツとのリレーションシップが含まれている場合は、プレゼンテーション ドキュメントとして定義できます。 パッケージリレーションシップアイテムにブックパーツとのリレーションシップが含まれている場合は、スプレッドシートドキュメントとして定義されます。 このハウツー トピックでは、ワープロ ドキュメント パッケージを使用します。
WordprocessingDocument オブジェクトの取得
Open XML SDK では、WordprocessingDocument クラスはWord ドキュメント パッケージを表します。 Word ドキュメントを作成するには、WordprocessingDocument クラスのインスタンスを作成し、パーツを設定します。 ドキュメントには、少なくとも、ドキュメントのメイン テキストのコンテナーとなるメイン ドキュメント パーツが必要です。 テキストは、 WordprocessingML
マークアップを使用して XML としてパッケージ内で表されます。
クラス インスタンスを作成するには、 Create(String, WordprocessingDocumentType)を呼び出します。 いくつかの Create メソッドが提供され、それぞれに異なるシグネチャが付いています。 1 つ目のパラメーターは、作成するドキュメントを表す完全なパスの文字列を受け取ります。 2 番目のパラメーターは、 WordprocessingDocumentType 列挙体のメンバーです。 このパラメーターはドキュメントの種類を表します。 たとえば、ドキュメント、テンプレート、マクロが有効なドキュメントとテンプレートごとに、 WordprocessingDocumentType 列挙体のメンバーが異なります。
注:
適切な WordprocessingDocumentType を慎重に選択し、永続化されたファイルの拡張子が正しく一致することを確認します。 WordprocessingDocumentTypeがファイル拡張子と一致しない場合は、Microsoft Wordでファイルを開くときにエラーが発生します。
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
v3.0.0 以降では、using ステートメントに依存することを優先して、Close() メソッドが削除されました。
これにより、閉じかっこに達したときに、 Dispose() メソッドが自動的に呼び出されます。 using ステートメントに続くブロックは、using ステートメントで作成または名前付けされたオブジェクトのスコープを確立します。 Open XML SDK の WordprocessingDocument クラスは、IDisposable実装の一部としてオブジェクトを自動的に保存および閉じます。また、ブロックを終了するとDispose()が自動的に呼び出されるため、using
ステートメントを使用する限り、明示的にSave()またはDispose()を呼び出す必要はありません。
Word ドキュメント パッケージを作成したら、パッケージにパーツを追加できます。 メインドキュメント パーツを追加するには、AddMainDocumentPartを呼び出します。 パーツの追加後、ドキュメント構造およびテキストの追加を設定できます。
WordProcessingML ドキュメントの構造
WordProcessingML
ドキュメントの基本的なドキュメント構造は、document
要素とbody
要素で構成され、その後に段落を表す p
などの 1 つ以上のブロック レベル要素が続きます。 段落には、1 つ以上の r
要素が含まれています。
r
は、書式設定などのプロパティの共通セットを持つテキストの領域である run を表します。 実行には、1 つ以上の t
要素が含まれています。
t
要素には、テキストの範囲が含まれています。 次のコード例は、"テキストの例" というテキストを含むドキュメントの WordprocessingML
マークアップを示しています。
<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 を使用すると、 WordprocessingML
要素に対応する厳密に型指定されたクラスを使用して、ドキュメント構造とコンテンツを作成できます。 これらのクラスは、 名前空間にあります。 次の表に、 document
、 body
、 p
、 r
、 t
の各要素に対応するクラスのクラス名を示します。
WordprocessingML 要素 | Open XML SDK クラス | 説明 |
---|---|---|
<document/> |
Document | メイン ドキュメント パーツのルート要素。 |
<body/> |
Body | ISO/IEC 29500 仕様で指定されている、段落、表、注釈などのブロック レベル構造のコンテナー |
<p/> |
Paragraph | 段落 |
<r/> |
Run | セクション |
<t/> |
Text | さまざまなテキスト |
WordprocessingML ドキュメントのパーツと要素の全体的な構造の詳細については、「 WordprocessingML ドキュメントの構造」を参照してください。
サンプル コード
次に示すのは、Xml コンテンツから Open XML ワープロ ドキュメント パッケージを作成するために使用できる完全なコード サンプル WordprocessingML
マークアップです。
プログラムを実行した後、作成したファイルを開き、その内容を調べます。"Hello world!" という語句を含む 1 つの段落にする必要があります。
以下は、C# および Visual Basic の完全なサンプル コードです。
// To create a new package as a Word document.
static void CreateNewWordDocument(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
{
// Set the content of the document so that Word can open it.
MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
SetMainDocumentContent(mainPart);
}
}
// Set the content of MainDocumentPart.
static void SetMainDocumentContent(MainDocumentPart part)
{
const string docXml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body>
<w:p>
<w:r>
<w:t>Hello World</w:t>
</w:r>
</w:p>
</w:body>
</w:document>";
using (Stream stream = part.GetStream())
{
byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
stream.Write(buf, 0, buf.Length);
}
}