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関連

    [Office]WordやPowerPointで画像の画質が悪くなった時の対処方法

    WordやPowerPointで画像を貼りつけたときやファイルを保存し…

  2. Office関連

    未読アイテムの件数を取得するOutlookマクロ

    「Outlook 未読 件数 マクロ」といったキーワード検索でのアクセ…

  3. アイコン一覧

    Office 2013 アイコン一覧(G)

    ・Office 2013 アイコン一覧 NUM…

  4. Office関連

    [Excel VBA]PrintPreview後に印刷するとCtrl+;の日付形式が変わる?

    MSDNフォーラムで面白い質問がありました。・Excel …

  5. Office関連

    OneNoteのノート名を列挙するマクロ

    今回はOneNoteのノート名を列挙するマクロを紹介します。O…

  6. アイコン一覧

    Office 2013 アイコン一覧(U)

    ・Office 2013 アイコン一覧 NUM…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP