|
.NET TIPS Excelファイルにアクセスするには?[C#、VB]デジタルアドバンテージ 岸本 真二郎2008/03/06 |
![]() |
|
|
|
.NETには「COM相互運用」と呼ばれる機能があり、COMコンポーネントを手軽に呼び出すことができる。一方、ExcelをはじめとするOffice製品は、その機能をマクロ(VBA)などからも活用できるようにCOMコンポーネントとして実装されている。このため、COM相互運用を使えば.NETアプリケーションから容易にExcelやWordのファイルを開き、それをさまざまに操作することが可能だ。本稿ではその基本的な記述方法として、Excelファイルをオープンしてワークシート上のセルの内容を参照する例を紹介する。
参照の追加
アプリケーションからExcelにアクセスするには、まずExcelが公開するCOMコンポーネントへの参照をプロジェクトに追加する。これには[参照の追加]ウィンドウで[COM]タブを選択し、「Microsoft Excel 12.0 Object Library」(Excel 2007の場合。Excel 2003の場合は「Microsoft Excel 11.0 Object Library」を選択)。
これにより、ソリューション・エクスプローラの「参照設定」のツリーには「Microsoft.Office.Core」と「Microsoft.Office.Interop.Excel」(Excel 2003の場合は「Excel」)が追加される。
![]() |
| [参照の追加]ウィンドウ |
| メニューの[プロジェクト]−[参照の追加]により開く。 |
これで、アプリケーションからExcelファイルにアクセス可能になる。
Excelがインストールされているにもかかわらず、[参照の追加]ウィンドウでExcelのコンポーネントが見つからない場合は、Officeのセットアップで「.NET プログラミングのサポート」がチェックされているかを確認してみるといいだろう。もしもチェックされていないようならチェックしておく。
なお、以降で示しているコード例はExcel 2007のCOMコンポーネントを使用した場合のものである。
Excelファイルをオープンする
まずはMicrosoft.Office.Interop.Excel.Applicationオブジェクトを生成する。これはWindowsのスタート・メニューからExcelを起動するのと同じようなものだ。Applicationオブジェクトを新規作成するには次のように記述する。
| ||
| Excelオブジェクトを作成する(上:C#、下:VB) |
新規作成した変数oXlsを使って、次は目的のファイルをオープンする。Excelでファイルをオープンすると、ワークブックを表すWorkbookオブジェクトが返され、これ以降の操作はこのオブジェクトに対して行う。
なお、本稿で示しているコードを使用する場合には、ファイルの先頭部分で次のようにして名前空間をインポートしておく必要がある。
| ||
| 名前空間のインポート(上:C#、下:VB) | ||
| この記述により、例えばMicrosoft.Office.Interop.Excel名前空間のApplicationクラスは、C#でもVBでも「Excel.Application」と記述できる。 |
Excelファイルのオープンは、Workbooks.Openメソッドを使うのだが、このメソッドのパラメータが非常に多い。通常のExcelファイル(.xls)を開く場合は、ファイル名だけを指定すればいいので、省略可能なほかのパラメータには「Type.Missing」を指定して“空”のパラメータを渡すようにする。Workbooks.Openメソッドの詳細については、オンライン・ヘルプなどを参照していただきたい。
| ||
| Excelファイルを開いてWorkbookオブジェクトを取得する(上:C#、下:VB) |
ワークシートの選択
Workbooks.Openメソッドの実行によりワークブックであるWorkbookオブジェクトが取得できた。続いてはこれに含まれるワークシートを取得する。ワークブックには複数のワークシートを格納できるので、目的のワークシートをワークシート名により探し出す必要がある。
本稿の例では、単純にワークブックに含まれるワークシートを順番に見ていき、ワークシート名が一致したら、それが目的のワークシートであると判断している。なおワークシートのインデックスは1から始まっているので注意が必要だ。
| ||
| Worksheetオブジェクトを取得する(上:C#、下:VB) |
セルの内容を読み込む
ここまでの操作でワークシートを得ることができたので、最後に目的のセルの内容を参照する。セルの内容はWorksheetオブジェクトのCellsプロパティで取得できるが、Cellsプロパティが返すRangeオブジェクトから内容を取得する方が分かりやすい。
Rangeオブジェクトはワークシート上の指定された範囲のセルを管理するのだが、1つのセルをRangeオブジェクトに割り当てて、そのRangeオブジェクトからセルの中身がアクセスできる。Rangeオブジェクトには、セルの内容を取り出すTextプロパティや計算式を示すFormulaプロパティ、セルの表示形式を表すNumberFormatプロパティなどが提供されている。
セルの指定は、
Cells[row, column]
のように行うが、row、columnはともに1始まりである。従って「A1」のセルは、Cells[1, 1]となる。
| ||
| RangeオブジェクトのTextプロパティを使ってセルの内容を取得する(上:C#、下:VB) |
Rangeオブジェクトに含まれるセルの値を取得するには、ValueプロパティかTextプロパティを用いる。Textプロパティは、セルの値が文字列化されたものを取得できるが、セルの表示形式で指定されている形式によって得られる内容が異なる。ここではセルの内容が文字列か数値の判断がつかないと仮定しているでTextプロパティを使っているが、状況によってはValueプロパティの方が妥当な場合もある。セルの内容を参照するのではなく、セルに値をセットする場合はValueプロパティを使用する必要がある。
すべての処理が終了したら、Workbookオブジェクトをクローズし、Excelを終了しておく。
| ||
| Excelを終了する(上:C#、下:VB) |
本稿は、Excelファイルの内容を読み取る方法のみを紹介したが、ApplicationオブジェクトやWorkbookオブジェクトなどに含まれるほかのメソッドを使って、新規にワークシートを作成してファイルに保存したり、セルの内容を修正して保存したりすることもできる。ワークシート上のセルにアクセスするところまでを理解すれば、Excelファイルの処理は意外と簡単に行えるはずだ。![]()
| カテゴリ:クラス・ライブラリ 処理対象:COMコンポーネント 使用ライブラリ:Applicationクラス(Microsoft.Office.Interop.Excel名前空間) 使用ライブラリ:Workbookクラス(Microsoft.Office.Interop.Excel名前空間) 使用ライブラリ:Worksheetクラス(Microsoft.Office.Interop.Excel名前空間) 使用ライブラリ:Rangeクラス(Microsoft.Office.Interop.Excel名前空間) |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



