閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

ExcelをC#で操作する

Excelで何かしようと思ったらVBAを使うのが普通なのでしょうが、VBはあまり好きじゃないのです。POIを使えばJavaScala等でもファイルを吐けますし、Win32OLEを使えばRubyや、あるいはPerlなどでも操作できますが、インテリセンスが使えるのでC#がお手軽じゃないかと思います。

というわけでC#でExcelを操作する手順のとっかかりだけ、メモ。Visual Studio 2008を使います。

参照の追加

適当なプロジェクトを作成して、ソリューションエクスプローラの「参照設定」からExcelを追加します。「.NET」タブの中にMicrosoft.Office.Interop.Excelがあるので、これを選んでOKを押します。

f:id:wata_d:20110530103409p:image

Excelがインストールされている環境では「COM」タブの方にもMicrosoft Excel 14.0 Object Libraryなんてのがありますが、こちらは使用しない方が良いでしょう。こちらは任意のバージョンのExcelが入っている環境でしかビルドできず、ビルドしたアセンブリの実行すらできなくなってしまいます。

使ってみる

Excel関連のクラスはMicrosoft.Office.Interop.Excel名前空間内にあります。usingしておくと楽です。

// Excelのインスタンスを生成して表示してみる
var excel = new Microsoft.Office.Interop.Excel.Application();
excel.Visible = true;

// ブックを作ってセルに何か入力してみる
Workbook book = excel.Workbooks.Add(Type.Missing);
Worksheet sheet = (Worksheet)book.Sheets[1];
sheet.Cells[1, 1] = "Hello Excel!";

どんなクラスがあるかなどはMSDNに載っています。



Microsoft.Office.Interop.Excel 名前空間

少し不便なのはWorkbooks.Sheetsプロパティからシートを取り出すときの型がobjectなのでキャストしないといけない、みたいなのがちらほらあるところですが、他の言語でインテリセンス書くよりは楽かなあと思います。あとは配列は例によって(?)1始まりなので少し注意しないと例外がぽんぽん出てしまいます。

グラフを描きたいとかシートの色を変えたいとか、やりたいことがあるときにどう実現すればいいかは、VBAをキーワードに入れて検索すると見つかりやすいかもしれません。VBAでできることは、大抵(多分)C#でもできます。