Office 2010とSilverlight 4の連携

2010年6月17日(木)
PROJECT KySS

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

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています