前回は,Windows XP SP2(RC2)評価ツールとMicrosoft Excelを連携できることを説明しました。今回は,評価ツールとExcelを連携し,RC2の情報の一部をExcel上に表示させます。Excelを初めて使用する人もいるでしょうから,Excelの基礎から説明することにします。

今回のサンプル・プログラム

図1●サンプル・プログラムの実行結果
 いつものように,まずは今回のサンプル・プログラムをこちらからダウンロードし,実行してみましょう。筆者の環境では,図1[拡大表示]のような情報が返されました。

 この画面は,評価ツールで収集したコントロールパネルの情報をExcel上に表示した直後の様子を示しています。フォントや文字の大きさ,あるいは,前景色や背景色といった細かな設定作業は行っていませんが,プログラミングの基本を抑えておけば,希望するコードは簡単に自作できることが分かると思います。

 筆者は時間を見つけては,Excelを操作する.NETサンプル・コードに目を通していますが,Windows用の自作プログラムを開発するのは間違いなく簡単になっています。今回のサンプル・プログラムの技術的な説明は後ほど行いますが,一定の考え方さえマスターしてしまえば,目的の機能を実装するプログラムを簡単に自作できます。

 RC2は公開されているとはいえ,正式版であるSP2の出荷時期はまだ正式に発表されていません。SP2が出荷されるまでの間,RC2を検討しながら,Excelを表示ツールとして使い切るノウハウを身に付けるのも決して悪い考えではないと思います。

サンプル・プログラムの技術背景

 今回のサンプル・プログラムは,評価ツール内で収集した情報をHTMLファイルとして格納するのではなく,Excelのシート内に格納するように変更しています。プログラムの一部機能を変更する場合,その影響範囲を最小に抑えることが大切です。筆者は,今回の変更はメソッドの追加を通して行いました。

 時間のあるときに評価ツールのソースコードをご覧になると分かりますが,SP2NameSpacesクラス内にはDoItという名称のメソッドがあります。このメソッドはRC2情報を収集し,HTMLファイルとして格納する機能を持っています。筆者は,このメソッドを直接変更するのではなく,DoItExという新しいメソッドを追加しました。こうすれば,以前のDoItメソッドはそのまま使えることになります。DoItExメソッドは,次のようなコード構成となっています。

'' ******************************
'' *** 第32回新規メソッド開始 ***
'' ******************************
Public Function DoItEx(myExcel)
Dim oWorkBook,oCollection,oTemp
Dim i
Set oTemp1 = myCPHelper_1.Items
If IsObject(myExcel) Then
Set oWorkBook = myExcel.WorkBooks.Add()
Set oCollection = oWorkBook.WorkSheets
For Each oTemp In oCollection
i = 1
oTemp.Cells(i,1).Value = "名前空間==>" & myCPHelper_1.Title
For Each oTemp2 In oTemp1
i = i + 1
oTemp.Cells(i,1).Value = oTemp2.Name
Next
Exit For
Next
i = i + 2
oTemp.Cells(i,1).Value = "これなかなか悪くないですね!"
i = i + 1
oTemp.Cells(i,1).Value = "実行日時:" & now
oWorkBook.SaveAs "C:\itprokiso\Excel\ITProToyota" & ".xls"
End If
End Function
'' ******************************
'' *** 第32回新規メソッド終了 ***
'' ******************************

 プログラミングに慣れていない方も(なんとなく)分かると思いますが,このメソッドは,Excelのオブジェクト構造を素直に操作し,収集したRC2情報をExcelのシート上に設定しています。

 前回触れたように,筆者はExcel初心者ユーザーにすぎませんから,マイクロソフト日本法人のこちらのサイトで公開されている次の4種類のExcelオブジェクトをうまく使っていくことを心がけました。

  • Applicationオブジェクト
  • Workbookオブジェクト
  • Worksheetオブジェクト
  • Rangeオブジェクト

 しかし実際のソースコード内では,次のようなオブジェクトが使われています。

  • Applicationオブジェクト
  • Workbooksオブジェクト
  • Workbookオブジェクト
  • Worksheetsオブジェクト
  • Worksheetオブジェクト
  • Cellsオブジェクト

 ApplicationオブジェクトはExcelの世界の中心となるオブジェクトですから,そのまま使用しても問題はありません。しかし,いくつかのExcel関連サンプル・プログラムに目を通してみると,WorkbookオブジェクトはWorkbooksオブジェクトの管理下に入っていることが分かりました。

 この点は,本連載ですでに触れている「コンテナとクラス」という基本的なプログラミングの枠組みを知っていれば,簡単に理解できます。そして,Worksheetオブジェクトは,Worksheetsコンテナの管理下に入っているはずだ,と次の知識を増やすことができます。

 問題はRangeオブジェクトです。Excel初心者である筆者は,マイクロソフト日本法人の公開情報をいくら読んでも,このRangeオブジェクトの使い方が分かるだけで,その意味をなかなか理解できませんでした。Excelは一般には「表計算ソフト」と呼ばれていますから,.NETクラスライブラリ・チームが用意してくれているTableクラスを検討してみました。

 すると,.NETのTableクラスにはRangeという概念がないらしいことが分かりました。Tableクラスの世界は,Row(行)とCell(セル)という2つの概念のみで成立しているようなのです。こうした情報を総合し,筆者は,「今後のことを考えると,Cellsオブジェクトを使用したほうが何かと便利であるに違いない」,と判断しました。

 以上の経緯を経て,筆者は前出のサイトで公開されている4種類のExcelオブジェクトを理解したことになります。残っているのは,各オブジェクトのプロパティとメソッドを活用していく作業だけです。ベテランExcelユーザーの方は,フォント,文字の大きさ,セルの書式などに関する知識を身に付ける作業が残っていることをご存知のはずです。詳しい説明は以降の連載で取り上げますが,筆者は,「それは難しい作業ではない」と考えています。

サンプル・プログラム使用上の注意点

 それでは最後に,今回のサンプル・プログラムの使用上の注意点を述べておきます。今回のサンプル・プログラムのメインルーチンは,次のようになっています。

If CBool(False = fEnd) Then
Set oClass = oClass31.getOldClass()
oClass.ImportNameSpace(3)
retVal = oClass.DoItEx(oExcel)
End If

 皆さんの環境にExcelがインストールされていれば,If条件が成立し,If文に続く3つの命令が実行されます。2番目の命令は,コントロールパネル名前空間をインポートしています。異なる名前空間をインポートする場合には,これまでの連載内容を振り返り,名前空間をしっかり理解するようにしてください。

 また,サンプル・プログラムは,動作を開始すると,作成したExcelブックを次のように保存します。

"C:\itprokiso\Excel\ITProToyota" & ".xls"

 特定のフォルダが保存先となりますから,サンプルを実行する前に,ご自分の環境に合わせて変更してください。現在これといった問題は発生しておりませんが,サンプル・プログラムの実行は自己責任とさせていただきます。

 今回のサンプル・プログラムはありきたりの情報をExcelシート上に表示するにすぎません。しかし,私たちは,Excelに接続し,公開される各種オブジェクトを操作する技術を無事に身に付けました。次回からは,表示する情報の質を高めたいと思います。もちろん,Excelがサポートするフォント,書式,グラフ機能,入力規則なども積極的に利用したいと思います。Excelプログラミングを一緒に楽しみましょう。

今回のまとめ

  • Excelには4つの主要なクラスが用意されている
  • 4つのクラスと関連.NETクラスを比較すると面白い
  • プログラミングの基本は「コンテナとクラス」である
  • Windows用のツールは簡単に自作できるようになっている

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!