はじめてのVisual Studio 2008 Professional Edition対応 (TECHNICAL MASTER)/techbank.jp
¥2,940
Amazon.co.jp


第13回投稿は

アプリケーションからExcelを呼び出す方法。


参考にしたのは、@IT の記事

Excelファイルにアクセスするには?[C#,VB] です。



以前、CSV関連の記事 も書きましたが

Excelが入っているPCでしか開発も利用もできないとはいえ

そこはデファクトスタンダードですから!!

CSVなんかより、超~ベンリッアップ


//----------------前準備

1 Windowsフォームアプリケーションを新規作成

2 @ITの記事 に従い、Excel用のライブラリを参照に追加

プロジェクトを右クリック→参照→参照の追加→COM

 →Microsoft Excel xx.x Object Libralyを選択→[OK]

3 コード内にusing namespace Microsoft::Office::Interop;を追加

4 フォームにボタンを追加、クリックイベントを作成

//----------------前準備おわり


で、クリックイベント(でなくてもいいんですが)に

以下のように書きます。


//----------------プログラム

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
// Excelオブジェクト
Excel::Application^ oXls = gcnew Excel::Application();
// 新しいブックを作成
Excel::Workbook^ wbook = oXls->Workbooks->Add(Type::Missing);
Excel::Worksheet^ wsheet = (Excel::Worksheet^)wbook->Worksheets[1];

//表見出し
wsheet->Range["A1",Type::Missing]->Value2 = "y=2^x";
wsheet->Range["A2",Type::Missing]->Value2 = "x";
wsheet->Range["B2",Type::Missing]->Value2 = "y";

//表の値
for(int i=0;i<5;i++){
wsheet->Cells[i+3,1] = i;
wsheet->Cells[i+3,2] = "=POWER(2,A"+(i+3)+")";
}

//罫線を追加
wsheet->Range["A2:B7",Type::Missing]->Borders->LineStyle = Excel::XlLineStyle::xlContinuous;

// Excelを起動、表示
oXls->Visible = true;
}

//----------------プログラム


結果がコレ。


Excelを開いてみた。


どうもExcel::Range というのが、セルの型らしく。

しかもセル1つではなく、範囲を示す場合でもコレでいける。

そしてInterop::Excelを使うにあたって、重要なのがType::Missing

自動設定になるので、わからないときはとりあえずコレを入れとけば良い。

で、Excelなので、当然ながら値としてExcel関数を書けば、自動で計算される



あと、先輩が教えてくれた超便利ワザ。

Excel VBAの機能で、マクロの記録 というのがある。

この記録ボタンを押してから、コードを知りたい操作をExcel上で行う。

記録を終了し、[マクロの表示]を押すと・・・

なんとコードがVBAで書かれている!!


私はBasicよくわからないけど、関数のライブラリとしては

C#,C++と同じになっている(というかラッパーが用意されてる)ので

ネットで調べるよりこっちの方が早い。


こんな便利ならVBマクロも勉強しよう、と真剣に思いましたとさ。