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

Officeのヘルプを単独で開く。前のページ

アクティブなスライドを取得するPowerPointマクロ次のページ

関連記事

  1. Office関連

    Word 2013の「個人用テンプレート」はどこ?

    Word 2010では、から「個人用テンプレート」(カスタム テンプレ…

  2. Excel

    ランダムな文字列を生成するVBAマクロ

    文字数を指定して0-9,A-Zまでのランダムな文字列を生成するマクロで…

  3. Office関連

    外部アプリケーションのコンボボックスの内容を取得するVBAマクロのサンプル

    Q&Aサイトに下記質問がありました。(この質問も何となく似たような…

  4. Office関連

    Evernote Cloud SDKを使ったVBAマクロ

    3年ほど前にEvernote for Windowsを操作するVBAマ…

  5. Office関連

    VBAで○○を禁止したい!・・・と思う前に。

    Office系Q&Aサイトを見ているとたまに出てくるのがこの質問。…

  6. Office関連

    Visio Onlineで図の作成・編集ができるようになりました。

    しばらくVisio Onlineを使っていなかったので気が付かなかった…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP