実用的アプリケーションの開発(Word編)

何を作るか?

ニュース記事のRSSフィードを読み込んで、Wordドキュメントを生成する、ドキュメントレベルのVSTOアプリケーションを作成します。

プロジェクトの作成

[ファイル]⇒[新規作成]⇒[プロジェクト]から、[Word 2007 ドキュメント]を作成します。


ドキュメントは新規に作成します。


[プロジェクト]⇒[ユーザーコントロールの追加]⇒[新しい項目の追加]⇒[ユーザーコントロール]を選択し、追加を押します。


デザイン画面が開きますが、ここでは何もしません。
次に、ソリューションエクスプローラでWebNewsReaderプロジェクトを右クリックし、[追加]⇒[新しい項目]を開きます。[リボン(ビジュアルデザイナ)]を選択し、追加を押します。
リボンのデザイン画面が開くので、タブとグループのLabelプロパティを設定します。


フィードの選択、登録を行うためのインタフェースを追加します。


フィードの取得を行うインタフェースを追加します。


フィードの初期値を設定しておくために、コードを編集します。


現在選択しているURLを保持するためのプロパティを追加します。


イベントハンドラを実装します。


フィードの取得を行うイベントハンドラ(button2_Click)については、後で実装します。

XMLの取得

XMLを取得して、Wordドキュメントに書き出す部分を実装します。


XMLファイルを読む部分が出来たので、フィードの取得を行うイベントハンドラ(button2_Click)から呼び出せるようにします。

XMLの解析

現時点で、以下のようなドキュメントが生成されます。


しかし、これは生のXMLを直接表示しているだけなので、非常に読みづらいです。
そこで、XMLのタグを元に、必要な情報のみを抽出します。
プロジェクト名で右クリックして、[追加]⇒[新しい項目]⇒[クラス]を選択します。


この新しいクラスの実装イメージは次ページの図のようになります。これから順に説明していきます。


まず、XMLファイルの構造を見てみましょう。


サイトの名前が、<rss><channel><title>の位置に記述されています。サイトのURLは、<rss><channel><link>の位置にあります。以下、同様にして、必要な情報をXPathで記述してみると、以下のようになります。

情報の種別 XPath
サイトの名前 /rss/channel/title
サイトのURL /rss/channel/link
エントリのタイトル /rss/channel/item/title
エントリのURL /rss/channel/item/link
エントリの更新時刻 /rss/channel/item/pubDate
エントリの内容 /rss/channel/item/description

まず、サイトの名前とURLを抽出します。ここでは、サイトの名前とURLは1つしか存在しないことを前提としています。


次に、各エントリの情報を抽出します。エントリは複数ある可能性が高いので、List<>を使って受けています。


ここまでで、XMLから必要な情報が取り出せました。

ドキュメントの生成

前節で抽出した文字列情報を、Wordの書式付きでドキュメントに書き込みます。書き出す情報と書式は以下の通りです。

情報の種別 書式
サイトの名前 見出し1
サイトのURL ハイパーリンク(書式のみ)
エントリのタイトル 見出し2
エントリの更新時刻 強調斜体
エントリの内容 標準

ソースコードは以下となります。実際の処理はWriteWordHelperというヘルパー関数が行っています。


以下はヘルパー関数のソースです。


引数に渡された文字列と書式情報を元に、Wordの段落を作成します。リンク要素にハイパーリンクを設定したかったのですが、うまくいかずに断念しました。

ドキュメントの消去

リボンインターフェースにボタンを追加し、生成したドキュメントを削除できるようにします。


作成したボタンをダブルクリックして、イベントハンドラを生成します。
クラスライブラリClass1に、Wordドキュメントをクリアして、初期状態に戻すコードを追加します。


このコードをイベントハンドラから呼び出します。