Office関連

コンテンツコントロールに外部XMLのデータをマップするWordマクロ

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文書だけど中のデータは外部データから持ってきたい、という場合には役立つ処理だろうと思います。

関連記事

  1. アイコン一覧

    Office 365アイコン(imageMso)一覧(H)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  2. Office アドイン

    [Office用アプリ]アプリ審査を通過するためのポイント

    前回の記事で、Seller Dashboard(販売者ダッシュボード)…

  3. Office関連

    [雑感]Office 365 Soloに向く人、向かない人

    ここ一週間ほどOffice 365 Soloを触ってみて、ある程度のこ…

  4. Office関連

    Office 2013 オンラインヘルプのリンクを集めてみました。

    新機能を把握するためにはヘルプを見るのが一番早い、というわけでOffi…

  5. Windows 10

    起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(UI Automat…

    当ブログでは、Microsoft Edgeを外部から操作するプログラム…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP