次の方法で共有


ファイル名を指定してワープロ ドキュメントを作成する

このトピックでは、Open XML SDK for Office のクラスを使用して、プログラムによってワープロ ドキュメントを作成する方法について説明します。


WordprocessingDocument オブジェクトを作成する

Open XML SDK では、WordprocessingDocument クラスはWord ドキュメント パッケージを表します。 Word ドキュメントを作成するには、WordprocessingDocument クラスのインスタンスを作成し、パーツを設定します。 ドキュメントには、少なくとも、ドキュメントのメイン テキストのコンテナーとなるメイン ドキュメント パーツが必要です。 テキストはパッケージ内で WordprocessingML マークアップを使用して XML として表されます。

クラス インスタンスを作成するには、 Create(String, WordprocessingDocumentType) メソッドを呼び出します。 いくつかの Create メソッドが提供され、それぞれに異なるシグネチャが付いています。 このトピックのサンプル コードでは、 Create メソッドと、2 つのパラメーターを必要とするシグネチャを使用します。 1 つ目のパラメーターは、作成するドキュメントを表す完全なパスの文字列を受け取ります。 2 番目のパラメーターは、 WordprocessingDocumentType 列挙体のメンバーです。 このパラメーターはドキュメントの種類を表します。 たとえば、ドキュメント、テンプレート、マクロが有効なドキュメントとテンプレートごとに、 WordProcessingDocumentType 列挙体のメンバーが異なります。

注:

適切な WordProcessingDocumentType を慎重に選択し、永続化されたファイルの拡張子が正しく一致することを確認します。 WordProcessingDocumentTypeがファイル拡張子と一致しない場合は、Microsoft Wordでファイルを開くときにエラーが発生します。

Create メソッドを呼び出すコードは、次のコード例に示すように、using ステートメントの一部に続けて角かっこで囲まれたブロックの一部です。

using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
{

v3.0.0 以降では、using ステートメントに依存することを優先して、Close() メソッドが削除されました。 これにより、閉じかっこに達したときに、 Dispose() メソッドが自動的に呼び出されます。 using ステートメントに続くブロックは、using ステートメントで作成または名前付けされたオブジェクトのスコープを確立します。 Open XML SDK の WordprocessingDocument クラスは、IDisposable実装の一部としてオブジェクトを自動的に保存および閉じます。また、ブロックを終了するとDispose()が自動的に呼び出されるため、using ステートメントを使用する限り、明示的にSave()またはDispose()を呼び出す必要はありません。

Word ドキュメント パッケージを作成したら、パッケージにパーツを追加できます。 メインドキュメント パーツを追加するには、WordprocessingDocument クラスの 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 要素に対応する厳密に型指定されたクラスを使用して、ドキュメント構造とコンテンツを作成できます。 これらのクラスは、 名前空間にあります。 次の表に、 documentbodyprt の各要素に対応するクラスのクラス名を示します。

WordprocessingML 要素 Open XML SDK クラス 説明
<document/> Document メイン ドキュメント パーツのルート要素。
<body/> Body ISO/IEC 29500 仕様で指定されている、段落、表、注釈などのブロック レベル構造のコンテナー
<p/> Paragraph 段落
<r/> Run セクション
<t/> Text さまざまなテキスト

WordprocessingML ドキュメントのパーツと要素の全体的な構造の詳細については、「 WordprocessingML ドキュメントの構造」を参照してください。


WordprocessingML マークアップを生成する

Open XML SDK を使用して基本的なドキュメント構造を作成するには、Document クラスをインスタンス化し、メイン ドキュメント パーツの Document プロパティに割り当ててから、BodyParagraphRun、および Text クラスのインスタンスを追加します。 これはサンプル コードの一覧に示されており、必要な WordprocessingML マークアップを生成する作業を行います。 サンプル リストのコードでは、各クラスの AppendChild メソッドを呼び出しますが、次のコード例に示す手法を使用して、コードをより短く読みやすくすることができます。

    mainPart.Document = new Document(
       new Body(
          new Paragraph(
             new Run(
                new Text("Create text in body - CreateWordprocessingDocument")))));

サンプル コード

CreateWordprocessingDocument メソッドを使用して、基本的なWordドキュメントを作成できます。 これを呼び出すには、唯一のパラメーターとして完全なパスを渡します。 次のコード例は、Public Documents フォルダーに Invoice.docx ファイルを作成します。

CreateWordprocessingDocument(args[0]);

ファイル拡張子 .docx は、 Create メソッドへの呼び出しの WordprocessingDocumentType.Document パラメーターによって指定されるファイルの種類と一致することに注意してください。

以下は、C# および Visual Basic の完全なコード例です。

static void CreateWordprocessingDocument(string filepath)
{
    // Create a document by supplying the filepath. 
    using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
    {
        // Add a main document part. 
        MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();

        // Create the document structure and add some text.
        mainPart.Document = new Document();
        Body body = mainPart.Document.AppendChild(new Body());
        Paragraph para = body.AppendChild(new Paragraph());
        Run run = para.AppendChild(new Run());
        run.AppendChild(new Text("Create text in body - CreateWordprocessingDocument"));
    }

関連項目