Word 2007で追加された機能「コンテンツコントロール」を使うと外部データソースのデータマッピングが簡単にできます。
今回はこのコンテンツコントロールに外部のXMLファイルのデータをマッピングする方法を紹介します。
まずは、元になるXMLファイルと対象となる文書の準備です。
・C:\Test\Customer.xml
<?xml version="1.0"?> <Customer> <CompanyName>株式会社ka-net</CompanyName> <ContactName>きぬあさ</ContactName> <ContactTitle>経理部長</ContactTitle> <Phone>12-3456-7890</Phone> </Customer>
・Word文書に下図のようなテーブルを挿入します。
次にコンテンツコントロール(今回はテキスト コンテンツ コントロール)を文書に追加します。
「開発」タブから手動で追加することもできるのですが、今回はマクロで追加します。
Public Sub AddContentControls() 'コンテンツコントロールの挿入 With ActiveDocument.Tables(1) .Cell(2, 2).Range.ContentControls.Add(wdContentControlText).SetPlaceholderText Text:="顧客名を入力してください。" .Cell(3, 2).Range.ContentControls.Add(wdContentControlText).SetPlaceholderText Text:="担当者名を入力してください。" .Cell(4, 2).Range.ContentControls.Add(wdContentControlText).SetPlaceholderText Text:="担当者の肩書きを入力してください。" .Cell(5, 2).Range.ContentControls.Add(wdContentControlText).SetPlaceholderText Text:="電話番号を入力してください。" End With End Sub
上記コードを実行すると、テーブル内に下図のようにコンテンツコントロールが挿入されます。
最後にXMLのデータをマッピングするコードを実行します。
Public Sub SetXMLMap() 'コンテンツコントロールにXMLのデータをマッピング If ActiveDocument.CustomXMLParts.Add.Load("C:\Test\Customer.xml") Then 'カスタムXMLパーツを追加して外部XMLファイル読込 'XPathを使用してデータをマッピング ActiveDocument.ContentControls(1).XMLMapping.SetMapping "/Customer/CompanyName" ActiveDocument.ContentControls(2).XMLMapping.SetMapping "/Customer/ContactName" ActiveDocument.ContentControls(3).XMLMapping.SetMapping "/Customer/ContactTitle" ActiveDocument.ContentControls(4).XMLMapping.SetMapping "/Customer/Phone" End If End Sub
上記コードは、文書内のCustomXMLPartsコレクションに新しいCustomXMLPartオブジェクトを追加して、各コンテンツコントロールにXMLファイルから読み込んだデータをXPathでマッピングする処理を行います。
以上のように、コンテンツコントロールを活用すると外部のデータとの連携が簡単にできるので、テンプレートはWord文書だけど中のデータは外部データから持ってきたい、という場合には役立つ処理だろうと思います。
この記事へのコメントはありません。