Office 2010とSilverlight 4の連携
TextBox内のデータをWordに表示する
今回は、COMオートメーションを使ってOffice 2010とSilvelright 4を連携させる、3つのサンプルを紹介します。
1つは、Silverlightアプリケーションから入力されたデータをWordドキュメント上に表示する処理。2つ目は、PowerPointファイルをSilverlightアプリケーションで開く処理。3つ目は、RSSフィードのデータをExcelワークシート上に表示する処理です。
まず、Wordドキュメント上にTextBoxコントロールのデータを表示するサンプルから紹介します。アプリケーション起動時には、TextBox内に、既存XML文書ファイルから取得したテキストが表示されています。[Word起動]ボタンをクリックすると、Wordドキュメント内に、このテキストが表示されます(図1)。
プロジェクト・ファイルは、こちらからダウンロードできます。
図1: ブラウザ外実行で、TextBox内にデータが表示されている。[Word起動]ボタンをクリックすると、Wordドキュメント内にテキストが表示される |
Wordを起動してテキストを表示するサンプルを作成する
では、早速サンプルを作成していきましょう。
前回までのサンプル作成時と同様の手順で、新規Silverlight 4プロジェクト(プロジェクト名は「SL4_Word」)を作成し、プロジェクト依存関係も設定しておきます。
図1で表示されているデータは、XML文書ファイル中のテキストです。Solution Explorer内にリスト1のサンプルXML文書ファイル(WhatsLinq.xml)を追加しておきます。また、LINQ to XMLでXML文書を処理しますので、「Project/Add Reference」からSystem.Xml.Linqを追加しておきます。
リスト1: TextBox内に読み込むXML文書ファイル(WhatsLinq.xml)
XML設計の心得タイトル>
XMLデータの処理には、LINQ to XML(Language-Integrated Query,統合言語クエリー)を用いる。~後略~節>
章>
書籍>
次に、Toolboxから、タイトル表示用のTextBlockと、Buttonコントロール、TextBoxコントロールをレイアウトします(図3)。
ButtonコントロールのContentプロパティには「Word起動」と指定しておきます。TextBoxコントロールのAcceptsReturnプロパティにチェックを付けておきます。TextWrappingにはWrapを、VerticalScrollBarVisibilityプロパティにはAutoを指定しておきます。
このサンプルは、信頼されたTrustedモードのブラウザ外実行で動作させます。設定や実行方法については、前回までの記事を参照してください。
以上の手順で書き出されるXAMLコードは省略します。
図2: Button、TextBoxコントロールをレイアウトする |
レイアウトができたら、リスト2のようなロジック・コードを記述していきます。
リスト2: Wordを起動して表示するロジックコード(MainPage.xaml.vb)
■名前空間の読み込み
COMオートメーションを扱うクラスの含まれるSystem.Runtime.InteropServices.Automation名前空間をインポートします。また、LINQ to XMLでXMLを処理するクラスの含まれるSystem.Xml.Linq名前空間をインポートします。
Imports System.Runtime.InteropServices.Automation
Imports System.Xml.Linq
■ページが読み込まれたときの処理
XElement.Loadメソッドで、サンプルXML文書ファイル(WhatsLinq.xml)を読み込みます。
読み込んだXML文書ファイルから、要素の内容テキストを取得して、TextBoxコントロール内に表示します。
Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim xmldoc As XElement = XElement.Load("WhatsLinq.xml")
Dim queryStr = xmldoc.Descendants("節").Value
TextBox1.Text = queryStr
End Sub
■[Word起動]ボタンがクリックされたときの処理
AutomationFactoryクラスのIsAvailableプロパティで、Silverlightにおけるオートメーション機能が、アプリケーションで利用可能かどうかをチェックします。同時に、HasElevatedPermissionsプロパティで、実行するアプリケーションが高い信頼性に基づいたブラウザ外で実行されているかどうかを判定し、利用可能な場合(Trueの場合)と高い信頼性に基づいている場合(Trueの場合)は、以下の処理を実行します。利用不可の場合は「インストールしてTrustedモードのブラウザ外実行で試してください。」というメッセージを表示します。
登録されたオートメーションサーバへのアクセスを行う、AutomationFactoryクラスのCreateObjectメソッドで、ProgID(Word.Application)に指定されたアプリケーションにアクセスします。
Wordドキュメントを表示状態にし、WordDocumentを追加します。Rangeメソッドで、開始位置、終了位置を0文字目に指定します。Wordドキュメントの先頭からデータを表示します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
If ComAutomationFactory.IsAvailable = True AndAlso Application.Current.HasElevatedPermissions = True Then
Dim myWord As Object = AutomationFactory.CreateObject("Word.Application")
myWord.Visible = True
Dim myDoc As Object = myWord.Documents.Add
Dim myRange As Object = myDoc.Range(0, 0)
myRange.Text = TextBox1.Text
Else
MessageBox.Show("インストールしてTrustedモードのブラウザ外実行で試してください。")
Exit Sub
End If
End Sub