Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 1/2)

概要 : Open XML アーキテクチャと WordprocessingML の基本を学習します。新しい Open XML オブジェクト モデルを使用して、ドキュメント パッケージを作成し、ドキュメント パーツを操作することの利点を示します。(7 印刷ページ)

Erika Ehrli、Microsoft Corporation

2007 年 8 月

適用対象 : 2007 Microsoft Office Suites、Microsoft Office Excel 2007、Microsoft Office PowerPoint 2007、Microsoft Office Word 2007

目次

  • 概要

  • Open XML パッケージのアーキテクチャについて

  • サーバー側ドキュメント統合ソリューションのアーキテクチャ

  • まとめ

付属サンプルのダウンロード : 2007 Office Sample: Building a Server-Side Document Generation Solution Using the Open XML Object Model (英語)

パート 2 : Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 2/2)

概要

情報システムの世界でドキュメントの作成は最も必要とされる機能の 1 つです。毎日、企業では、さまざまな基幹業務 (LOB) システムに格納されたデータに基づいて、企業幹部が有意義な情報を取得できるようにする何百万ものレポートが作成されます。

企業は、ビジネス プロセスの改善、ワークフローの最適化、およびビジネスを改善する情報の出力に掛かる時間と費用の削減に役立つソフトウェアベースのソリューションを常に探し求めています。テンプレートに基づき顧客向けの請求書、法的書類、メモ、手紙などのドキュメントを生成するソリューションが必要とされることもあります。

こうした企業では、Web ベースのアプリケーションまたは SharePoint サイトをフロントエンド Web サーバーとして使用して情報を操作することがあります。こうしたアプリケーションでは、Web ベースのレポートを Microsoft Office Word 2007 または Microsoft Office Excel 2007 にエクスポートする方法が必要になることがあります。

これまで、サーバーから Microsoft Office ドキュメントを生成することは困難でした。Microsoft Office の以前のバージョンは古いバイナリ形式に基づいていました。したがって、Microsoft Office ドキュメントを操作したり生成するには、オートメーションを使用する必要がありました。サーバー側のこの方法は、Microsoft Office の以前のバージョンではサポートされていません。

2007 Microsoft Office system は、Word 文書、Excel ワークシート、および Microsoft Office PowerPoint 2007 プレゼンテーションをサーバー側でプログラムにより生成するために役立つ新しい機能を備えています。その機能が Open XML 形式です。

この記事「Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 1/2)」では、Open XML 形式と Open XML オブジェクト モデルを使用して Microsoft Office ドキュメントを組み立てるため、Microsoft .NET Framework に基づき、サーバー側ソリューションを設計し、構築する方法を確認します。ここでは Open XML 形式のアーキテクチャについて説明し、Open XML オブジェクト モデルを使用したドキュメント パッケージの作成、ドキュメント パーツの操作、および WordprocessingML コードの作成の基本概念を説明します。また、サーバー側ドキュメント統合ソリューションのアーキテクチャについても解説しています。

パート 2「Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 2/2)」では、ビジネス シナリオを提示し、Microsoft ASP.NET 2.0 アプリケーションを使用して Word 2007 の売り上げレポートを生成する方法を調べます。

ダウンロード「2007 Office Sample: Building a Server-Side Document Generation Solution Using the Open XML Object Model (英語)」では、Open XML オブジェクト モデルを使用してサーバー側アプリケーションからドキュメントを作成する Microsoft Visual Basic 2005 と Microsoft Visual C# のサンプル ファイルを提供します。

Open XML パッケージのアーキテクチャについて

Open XML パッケージの仕様では、ドキュメントを XML ファイル (ドキュメント パーツ) の集合として定義し、ドキュメント パーツ間のリレーションシップを定義しています。ほとんどのドキュメント パーツは、アプリケーション データ、メタデータ、および顧客データを記述し、コンテナ ファイル (パッケージ) 内に格納された XML ファイルです。コンテナ パッケージ内には、イメージを表すバイナリ ファイル、ドキュメントに埋め込まれた OLE オブジェクトなど、他の XML 以外のパーツも含まれています。また、ドキュメント パーツ間のリレーションシップを指定するリレーションシップ パーツもあります。リレーションシップは 2007 Microsoft Office system のファイルの構造を示します。

ドキュメント パーツがファイルのコンテンツを構成する一方で、リレーションシップはドキュメント パーツの構成を記述します。また、リレーションシップは内部ドキュメント参照だけでなく、外部リソースへのリンクも表すことにも注意する必要があります。たとえば、ドキュメント内のリンクされた画像またはオブジェクトは、リレーションシップを使用しても表されます。したがって、外部リソースへのリンクは簡単に検索、検査、および変更できます。

Word 2007 では、パッケージはドキュメントを表します。パッケージ内には、ドキュメントを構成するパーツがあります。たとえば、Word 2007 のファイルには次のフォルダとファイルを含めることができます (ただし、これだけに限定されません)。

  • docProps フォルダ。アプリケーションのプロパティ パーツが入ります。

  • App.xml ファイル。アプリケーション固有のプロパティが入ります。

  • Core.xml ファイル。Open Packaging Convention ドキュメント形式に基づくすべてのファイルの共通ファイル プロパティが入ります。

  • _rels フォルダ。特定のドキュメント パーツのリレーションシップ パーツが格納されます。

  • .rels ファイル。ドキュメント構造を定義するリレーションシップを記述するリレーションシップ パーツ。

  • document.xml。Word XML 形式ファイルで唯一の必須パーツ。このパーツには、ドキュメントのコンテンツを定義する XML マークアップ (WordprocessingML) が入ります。

  • [Content_Types].xml。パッケージに含まれる各パーツのコンテンツ タイプを記述します。

  • styles.xml ファイル。ドキュメントのスタイル定義が入ります。

図 1. 簡単なドキュメントのディレクトリ構造

簡単なドキュメントのディレクトリ構造

OpenXML ドキュメントは Open Packaging Convention (OPC) パッケージです。すべてのドキュメント パーツは、業界標準の ZIP 形式でコンテナ ファイルまたはパッケージに格納されます。このパッケージには、ドキュメント内に含まれるすべてのコンテンツが保持されます。

Open XML 形式のアーキテクチャの詳細については、「Office (2007) Open XML ファイル形式の概要」を参照してください。

Word 2007 XML 形式のアーキテクチャの詳細については、「チュートリアル : Word 2007 XML 形式」を参照してください。

WordprocessingML の基本

Word 2007 ドキュメントは WordprocessingML マークアップを使用して定義します。WordprocessingML は古いバイナリ形式に基づいて作成されました。WordprocessingML では、マークアップ言語を使用して、ドキュメントのテキスト コンテンツと書式を記述します。WordprocessingML は階層構造ではデータを表しません。その代わり、Word ドキュメントはストーリー (メイン ドキュメント、コメント、ヘッダー) およびプロパティ (スタイル、番号設定定義) の集合から構成されます。各ストーリーには構造化ドキュメント タグ (SDT) を使用して定義された特定の種類の構造が含まれます。

WordprocessingML で、ストーリーはユーザーが入力できるコンテンツの独自の領域として定義されます。WordprocessingML ドキュメントで最も重要なストーリーはメイン ドキュメント ストーリーです。ここにはドキュメントの主要コンテンツが入ります。

次のコードは、Word 2007 ドキュメントの document.xml パーツで典型的な WordprocessingML マークアップの例です。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">  <w:body>
    <w:p>
      <w:r>
        <w:t>I saw a rabbit today.</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

XML 宣言、ルート要素、名前空間

最初の行は、すべての XML ファイルに必要な XML 宣言を表しています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

重要

Word では UTF-8 エンコーディングをサポートしています。WordprocessingML を作成する場合は、必ず UTF-8 エンコーディングを使用してください。UTF-8 エンコーディングの詳細については、「UTF-8 and Unicode Standards (英語)」を参照してください。

2 行目はドキュメント ルート要素です。XML ドキュメントには、ルート要素が 1 つだけ必要です。ルート要素では、ファイルの要素と属性に対する名前空間を定義します。

<w:document xmlns:w="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">

注意

WordprocessingML ドキュメントで使用する名前空間の詳細なリストについては、「Ecma Office Open XML File Formats Standard Final draft - Part 4 - Markup Language Reference (英語)」を参照してください。

メイン ドキュメント ストーリー パーツ、段落、run、テキスト

メイン ドキュメント ストーリーは本文要素内に格納されます。HTML に似て、Word ドキュメントのコンテンツは <w:body> タグ内に入ります。

段落 <w:p> は WordprocessingML ドキュメントで最も基本的な単位です。段落要素は本文要素内にあるため、メイン ドキュメント ストーリーの一部になります。段落要素には 3 つの情報が入ります。

  • 段落のプロパティ

  • インライン コンテンツ

  • ドキュメントのマージと比較操作に使用するリビジョン ID (省略可能)

また、次のようなインライン構造を入れることもできます。

  • <w:t> テキスト領域を含む run <w:r>

  • テキスト ブロックまたはインライン テキストで使用できるカスタム マークアップ

  • コメント、変更履歴、ブックマークなどの注釈

  • DrawingML 要素

  • 日付、ページ番号、ドキュメント タイトル、作成者などのフィールド

  • ハイパーリンク

段落はブロック レベル コンテンツを使用できる場所に置くことができます。

  • ストーリー内の最上位 (ヘッダー、フッター、メイン ドキュメント)

  • テーブル セル内に入れ子

  • 構造化ドキュメント タグ内または注釈マーカー内に入れ子

    <w:p>
      <w:r>
        <w:t>I love coffee.</w:t>
      </w:r>
    </w:p>

テーブル

テーブルは行と列に整列された段落の集合です。WordprocessingML テーブルにはブロック レベルのコンテンツが含まれ、<w:tbl> 要素を使用して指定します。この要素は HTML の <table> 要素に似ています。

WordprocessingML テーブルには 4 種類のコンテンツが入ります。

  • プロパティ。<w:tblPr> セクションではテーブル固有のプロパティを指定します。サイズ、配置、テキストの折り返し、スタイル、罫線、網掛けなどのプロパティを定義できます。

  • グリッド。テーブルでセルのレイアウトに使用する仮想グリッドを定義します。<w:tblGrid> 要素を使用して、テーブルにグリッドを定義します。

  • 。<w:tr> 要素はテーブルの行を定義します。この要素は HTML の <tr> 要素に似ています。

  • セル。<w:tc> 要素はテーブルのセルを定義します。この要素は HTML の <td> 要素に似ています。

次のサンプル コードでは、テーブルのプロパティとコンテンツを定義しています。

<w:tbl><w:tblPr>
   <w:tblStyle w:val="LightGrid-Accent2" />
     <w:tblW w:w="0" w:type="auto" />
     <w:tblLook w:val="04A0" />
   </w:tblPr>   <w:tblGrid>
     <w:gridCol w:w="2394" />
   </w:tblGrid><w:tr w:rsidR="00D66682" w:rsidTr="00616703">
     <w:trPr>
       <w:cnfStyle w:val="100000000000" />
     </w:trPr>
     <w:tc>
       <w:tcPr>
         <w:tcW w:w="2394" w:type="dxa" />
       </w:tcPr>
       <w:p>
         <w:r>
           <w:t>WordprocessingML is fun</w:t>
         </w:r>
       </w:p>
     </w:tc></w:tr></w:tbl>

注意

<w:p> 段落要素に <w:tbl> 要素を埋め込むことはできません。

スタイル パーツ、スタイル、書式

"スタイル" パーツは、1 つの論理単位として適用できる書式プロパティの特定の値セットを定義します。たとえば、Word 2007 の Normal スタイルでは、次の書式プロパティを定義します。

  • フォント = Calibri (body)

  • フォント サイズ = 11 ポイント

  • フォント言語 = Word の既定値 (ユーザーの設定値)

  • 配置 = 左揃え

  • 行間 = 1 行

  • 改ページ時 1 行残して段落を区切らない

Open XML パッケージ内で、スタイルは <style> 要素のスタイル定義が入った固有パーツ (styles.xml) に格納されます。

注意

以下のコード例には、オンラインで表示したときに見やすくするための改行が追加されています。実際にコードで使用する前に改行を削除する必要があります。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:styles xmlns:r="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html" 
xmlns:w="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
  <w:docDefaults>
    …
  </w:docDefaults>
  <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="1" w:defUnhideWhenUsed="1" w:defQFormat="0" w:count="267">
    <w:lsdException w:name="Normal" w:semiHidden="0" w:uiPriority="0" w:unhideWhenUsed="0" w:qFormat="1" />
    <w:lsdException w:name="heading 1" w:semiHidden="0" w:uiPriority="9" w:unhideWhenUsed="0" w:qFormat="1" />
    <w:lsdException w:name="Title" w:semiHidden="0" w:uiPriority="10" w:unhideWhenUsed="0" w:qFormat="1" />
    <w:lsdException w:name="Light List Accent 1" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0" />
  </w:latentStyles>
  <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
    <w:name w:val="Normal" />
    <w:qFormat />
  </w:style>
  <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
    …
  </w:style>
  <w:style w:type="table" w:default="1" w:styleId="TableNormal">
    …
  </w:style>
  <w:style w:type="numbering" w:default="1" w:styleId="NoList">
    …
  </w:style>
</w:styles>

スタイルはドキュメントの外見を定義します。styles.xml パーツにスタイル セットを定義します。テーブル、段落、段落番号などの書式設定に使用する場合、スタイルの ID を使用して参照を追加します。

<w:p>
      <w:pPr>
        <w:spacing w:before="200" w:after="0" />
      </w:pPr>
      <w:pPr>
        <w:pStyle w:val="Heading 3" />
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:b />
          <w:sz w:val="26" />
        </w:rPr>
        <w:t>Sales by Territory - Northwest</w:t>
      </w:r>
    </w:p>

Open XML でスタイルを使用するには、次の 4 つの作業を行う必要があります。

  1. ドキュメント パッケージ MySampleDocument.docx\word\styles.xml にスタイル パーツを作成します。このファイルには、前のコードに示したスタイル マークアップ定義が入っています。

    <w:style w:type="paragraph" w:default="1" w:styleId="MyStyle">
        …
    </w:style>
    
  2. MySampleDocument.docx\word\_rels\document.xml.rels ファイルにリレーションシップを定義します。

    <Relationship Id="rId1" Type="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html/styles" Target="styles.xml" /> 
    
  3. MySampleDocument.docx\[Content_Types].xml ファイルにスタイル コンテンツ タイプを定義します。

    <Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml" />
    
  4. 定義済みスタイルへの参照を追加して、ドキュメントでスタイルを使用します。

    <w:p>
       <w:pPr>
         <w:pStyle w:val="MyStyle" />
       </w:pPr>
       <w:r>
         <w:rPr>
           <w:b />
         </w:rPr>
         <w:t>My text</w:t>
       </w:r>
    </w:p>
    

イメージ パーツと画像

画像は DrawingML 名前空間に属します。DrawingMLMain 名前空間では、すべての種類の DrawingML オブジェクト (グラフ、図、図形、画像など) に対して、すべての基本構造を定義します。イメージをドキュメントに挿入するには、<w:drawing> 要素を run <w:r> 要素内に挿入する必要があります。

<pic:pic> 要素は画像を定義し、<p:blipFill> 要素は画像オブジェクトの図の塗りつぶしの種類を指定します。

<w:p>
   <w:r><w:drawing>
       <wp:inline xmlns:wp="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
         <wp:extent cx="1628936" cy="733586" />
         <wp:docPr name="image.jpeg" id="1" />
         <a:graphic xmlns:a="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
           <a:graphicData uri="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
             <pic:pic xmlns:pic="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
               <pic:nvPicPr>
                 <pic:cNvPr id="0" name="image.jpeg" />
                 <pic:cNvPicPr />
               </pic:nvPicPr>
               <pic:blipFill>
                 <a:blip r:embed="rId2" xmlns:r="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html" />
                 <a:stretch>
                   <a:fillRect />
                 </a:stretch>
               </pic:blipFill>
               <pic:spPr>
                 <a:xfrm>
                   <a:off x="0" y="0" />
                   <a:ext cx="1630190" cy="734151" />
                 </a:xfrm>
                 <a:prstGeom prst="rect" />
               </pic:spPr>
             </pic:pic>
           </a:graphicData>
         </a:graphic>
       </wp:inline>
     </w:drawing>   </w:r>
</w:p>

<a:blip> 要素の r:embed 属性を使用して定義されたリレーションシップで実際のイメージへの参照を追加します。リレーションシップはパッケージのイメージ パーツを指します。

Open XML でドキュメント パーツにイメージを追加し、ドキュメント コンテンツとして示すには、次の 4 つの作業を行う必要があります。

  1. ドキュメント パッケージ MySampleDocument.docx \media\myimage.jpg にイメージ パーツを作成します。

  2. MySampleDocument.docx\word\_rels\document.xml.rels ファイルにリレーションシップを定義します。

    <Relationship Type="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html/image" Target="/media/image.jpg" Id="rId2" />
    
  3. MySampleDocument.docx\[Content_Types].xml ファイルにイメージ コンテンツの種類を定義します。

    <Default Extension="jpg" ContentType="image/jpeg" />
    
  4. 最後に、ドキュメントにイメージを挿入するため、run <w:r> 要素内に <w:drawing> 要素を挿入する必要があります。

    <w:p>
       <w:r>
         <w:drawing>
           <wp:inline xmlns:wp="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
             <wp:extent cx="1628936" cy="733586" />
             <wp:docPr name="image.jpeg" id="1" />
             <a:graphic xmlns:a="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
               <a:graphicData uri="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
                 <pic:pic xmlns:pic="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html">
                   <pic:nvPicPr>
                     <pic:cNvPr id="0" name="image.jpeg" />
                     <pic:cNvPicPr />
                   </pic:nvPicPr>
                   <pic:blipFill>
                     <a:blip r:embed="rId2" xmlns:r="http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html" />
                     <a:stretch>
                       <a:fillRect />
                     </a:stretch>
                   </pic:blipFill>
                   <pic:spPr>
                     <a:xfrm>
                       <a:off x="0" y="0" />
                       <a:ext cx="1630190" cy="734151" />
                     </a:xfrm>
                     <a:prstGeom prst="rect" />
                   </pic:spPr>
                 </pic:pic>
               </a:graphicData>
             </a:graphic>
           </wp:inline>
         </w:drawing>
       </w:r>
    </w:p>
    

高度な WordprocessingML

Word 2007 では、WordprocessingML マークアップを使用して WYSIWYG (what you see is what you get) ドキュメントを作成できます。これは 2007 Microsoft Office system で提供される強力な機能です。WordprocessingML マークアップを使用し、オートナンバー リスト、カスタム コンテンツ XML、テーマ、フッター、ヘッダーなどが入った複雑なドキュメントを作成できます。

WordprocessingML マークアップを使用した高度なドキュメント作成の詳細については、「Ecma Office Open XML File Formats Standard Final draft - Part 4 - Markup Language Reference (英語)」を参照してください。このドキュメントには、WordprocessingML のスキーマ定義が記載されています。これは、Word 2007 ドキュメントをプログラムで生成するには不可欠なリファレンスです。このガイドには、SpreadsheetML、PresentationML、DrawingML、およびその他の Microsoft Office マークアップ スキーマのリファレンス資料もあります。

Open XML オブジェクト モデルを使用したドキュメント パッケージの操作

手動でドキュメント パッケージを操作するには、標準 ZIP ユーティリティを使用します。また、Open XML Package Explorer (英語)XMLSpy (英語) などのツールを使用して、ドキュメント パッケージに格納されたファイルのコンテンツ (マークアップ) を調べ操作することもできます。

さらに、Microsoft の開発者向けアプリケーション、サードパーティ製ソリューション、またはオープン ソース API を使用して、プログラムでドキュメント パッケージとドキュメント コンテンツを操作することもできます。

.NET Framework に基づいてドキュメント統合ソリューションを構築している場合、Microsoft SDK for Open XML Formats の使用を検討してください。このソフトウェア開発キット (SDK) に含まれている Open XML オブジェクト モデルを使用すると、パッケージを作成し、パッケージを構成するファイルを操作できます。

Open XML オブジェクト モデルは簡単に使用できます。プロジェクトまたはアプリケーションで、Microsoft.Office.DocumentFormat.OpenXml.dll への参照を追加します。また、Microsoft Office Developer Center から「Microsoft SDK for Open XML Formats テクノロジ プレビュー」をダウンロードすることもできます。

アプリケーションのビジネス ロジック レイヤーを作成するときは、Open XML オブジェクト モデルを使用するレポート生成ヘルパー クラスを独自に作成することを検討してください。Open XML オブジェクト モデルを使用することで、ドキュメント パッケージとそのパーツの作成と操作に必要なコードは大幅に簡略化されます。ただし、作成が必要なマークアップ コードの量は、ドキュメント コンテンツの複雑さによって異なります。他のマークアップ言語と同様、WordprocessingML は冗長です。

次のコード例では、Visual C# と Microsoft Visual Basic 2005 のコードを使用してメイン ドキュメント パーツと簡単な WordprocessingML コンテンツを持つ簡単なドキュメント パッケージを作成する方法を示します。

// Create a package as a Word document.
public 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 content of MainDocumentPart.
public static void SetMainDocumentContent(MainDocumentPart part)
{
   const string docXml =
@"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> 
<w:document xmlns:w=""http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html"">
    <w:body><w:p><w:r><w:t>I love coffee</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);
    }
}
Public Sub CreateNewWordDocument(ByVal document As String)
   Dim wordDoc As WordprocessingDocument = WordprocessingDocument.Create(document,
       WordprocessingDocumentType.Document)
   Using (wordDoc)
      ' Set the content of the document so that Word can open it.
      Dim mainPart As MainDocumentPart = wordDoc.AddMainDocumentPart
      SetMainDocumentContent(mainPart)
   End Using
End Sub

Public Sub SetMainDocumentContent(ByVal part As MainDocumentPart)
   Const docXml As String = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _
   "<w:document xmlns:w=""http://schemas.liquid-technologies.com/OfficeOpenXML/2006/default.html"">" & _
   "<w:body><w:p><w:r><w:t>I love coffee</w:t></w:r></w:p></w:body></w:document>"
   Dim stream1 As Stream = part.GetStream
   Dim utf8encoder1 As UTF8Encoding = New UTF8Encoding()
   Dim buf() As Byte = utf8encoder1.GetBytes(docXml)
   stream1.Write(buf, 0, buf.Length)
End Sub

Microsoft SDK for Open XML Formats」の「方法」には、ドキュメント パッケージとパーツの操作方法を示す他のコード例があります。

以前のバージョンとの互換性

通常、ドキュメント統合ソリューションには、Microsoft Office system の以前のバージョンとの下位互換性が必要です。Open Packaging Convention に従って作成されたドキュメント パッケージの形式は、Microsoft Office の以前のバージョンで使用された古いバイナリ形式とは異なります。

Open XML 形式を使用して 2007 Microsoft Office ドキュメントを生成した場合、Word/Excel/PowerPoint 2007 ファイル形式用 Microsoft Office 互換機能パック をダウンロードしインストールすることで Microsoft Office の以前のバージョンで作成されたファイルのオープン、編集、および保存ができます。これは無料でダウンロードでき、Microsoft Office 2000、Microsoft Office XP、または Microsoft Office 2003 の Word、Excel、および PowerPoint に Open XML サポートを追加します。

サーバー側ドキュメント統合ソリューションのアーキテクチャ

Microsoft Office プラットフォームで開発されたソリューションは Office Business Applications (OBA) に分類できます。OBA ソリューションの一般的タスクの 1 つはドキュメント統合です。ドキュメント統合では、別のシステムのデータを使用してドキュメントを自動生成するか、ドキュメントを処理してデータを抽出します。

目的に応じてさまざまな Microsoft Office プログラム、ツール、およびテクノロジを組み合わせることができます。Microsoft Visual Studio 2005 Tools for Office、拡張可能な Microsoft Office Fluent ユーザー インターフェイス、Microsoft SharePoint 製品とテクノロジ、および Office Open XML 形式を使用し、さまざまな構成要素をまとめてカスタム OBA ソリューションを作成できます。

最小のサーバー側ドキュメント統合ソリューションでは、LOB システムとデータを、ユーザー向けの高性能なプレゼンテーション レイヤー作成に役立つカスタム LOB ソフトウェアとコンポーネントと統合します。

図 2. サーバー側ドキュメント統合ソリューションのアーキテクチャの概要

サーバー側ドキュメントのアーキテクチャの概念図

サーバー側ドキュメント統合ソリューションは次の 4 層に分解できます。

  • LOB システムとデータ

  • LOB ソフトウェアとコンポーネント

  • フロントエンド Web サーバー

  • クライアント アプリケーション

LOB システムとデータ

LOB システムおよびデータは、アプリケーションのデータ レイヤー ロジックをカプセル化します。企業では、SAP、Siebel、Microsoft Dynamics、SharePoint サイト、またはその他のサードパーティ製アプリケーションなど、異なるクロスプラットフォーム LOB システムにデータを格納できます。また、データは Microsoft SQL Server、Oracle などのデータベース システムに格納することもできます。

カスタム データ ヘルパー クラスを作成し、さまざまな LOB システムからデータを取得するプロセスをカプセル化できます。データ ヘルパー クラスでは、Web サービス、サードパーティ製 API、または ODBC 接続を使用してさまざまな LOB バックエンド システムとデータにアクセスできます。

LOB ソフトウェアまたはコンポーネント

LOB ソフトウェアおよびコンポーネントは、アプリケーションのビジネス ロジック層をカプセル化します。カスタム クラスを作成し、既存の LOB サービスを使用するか他の LOB サービスを作成するビジネス プロセスとワークフローを定義できます。また、サービス指向のアーキテクチャでアプリケーションを使用することもできます。カスタム レポート生成クラスを作成し、ドキュメント統合のプロセスをカプセル化できます。これらのクラスでは Open XML オブジェクト モデルを使用して、ドキュメント パッケージを生成し、LOB データに基づくドキュメント コンテンツを出力します。

注意

Microsoft Office ドキュメントを生成するために、サーバーに 2007 Microsoft Office system をインストールする必要はありません。Open XML 形式によって、オートメーションを使用せずにドキュメントを生成および操作できます。

フロントエンド Web サーバー

フロントエンド Web サーバーはアプリケーションの生産性レイヤーをカプセル化します。SharePoint サイトまたは ASP.NET アプリケーションを使用してカスタム レポートの処理、フィルタリング、選択、および定義を行うことができます。フロントエンド Web サーバーで、ボタンまたは定義済みのカスタム アクションがある Web パーツまたは Web ページを提供し、ユーザーが Word、Excel、または PowerPoint にレポートをエクスポートできるようにすることができます。

クライアント アプリケーション

クライアント アプリケーションはソリューションのプレゼンテーション レイヤーを表します。サーバー側ソリューションがドキュメントを作成した後、Microsoft Office プログラムを使用してレポートを開き、ドキュメントを表示するか操作できます。

まとめ

世界中の企業が、さまざまな LOB システムやデータに含まれている情報の提供に役立つシステムを必要としています。

Open XML 形式を使用すると、ドキュメント コンテンツを WordprocessingML (Word 文書用)、SpreadsheetML (Excel ワークブック用)、および PresentationML (PowerPoint プレゼンテーション用) として格納するドキュメント パッケージとドキュメント パーツを作成できます。

Open XML オブジェクト モデルによって, .NET Framework を使用するアプリケーションでプログラム的に Open XML ドキュメント パッケージとドキュメント パーツを生成し操作するプロセスは簡単になります。

カスタム データ ヘルパー クラス (データ アクセス レイヤー) を作成することで LOB システムのデータの抽出と公開ができます。また、カスタム レポート生成クラス (ビジネス ロジック レイヤー) を作成し Open XML オブジェクト モデルを使用して、Word 2007 文書、Excel 2007 ワークシート、または PowerPoint 2007 プレゼンテーションを生成し操作できます。SharePoint サイトなどのフロントエンド Web サーバーや ASP.NET アプリケーションにより、Word、Excel、または PowerPoint への "エクスポート" 機能を公開できます。

このドキュメントのパート 2 では、オープン XML オブジェクト モデルと ASP.NET 2.0 を使用してサーバー側ドキュメント ソリューションを構築する方法を示します。

パート 2 : Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 2/2)

謝辞

この記事の執筆にご協力くださった Doug Mahugh 氏、Wouter van Vugt 氏、および Frank Rice 氏に感謝いたします。

追加情報

詳細については、次のリンクを参照してください。