- はじめてのVisual Studio 2008 Professional Edition対応 (TECHNICAL MASTER)/techbank.jp
- ¥2,940
- Amazon.co.jp
第13回投稿は
アプリケーションからExcelを呼び出す方法。
参考にしたのは、@IT の記事
Excelファイルにアクセスするには?[C#,VB] です。
以前、CSV関連の記事
も書きましたが
Excelが入っているPCでしか開発も利用もできないとはいえ
そこはデファクトスタンダードですから
CSVなんかより、超~ベンリッ
//----------------前準備
Windowsフォームアプリケーションを新規作成
@ITの記事 に従い、Excel用のライブラリを参照に追加
プロジェクトを右クリック→参照→参照の追加→COM
→Microsoft Excel xx.x Object Libralyを選択→[OK]
コード内にusing namespace Microsoft::Office::Interop;を追加
フォームにボタンを追加、クリックイベントを作成
//----------------前準備おわり
で、クリックイベント(でなくてもいいんですが)に
以下のように書きます。
//----------------プログラム
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::Range というのが、セルの型らしく。
しかもセル1つではなく、範囲を示す場合でもコレでいける。
そしてInterop::Excelを使うにあたって、重要なのがType::Missing 。
自動設定になるので、わからないときはとりあえずコレを入れとけば良い。
で、Excelなので、当然ながら値としてExcel関数を書けば、自動で計算される。
あと、先輩が教えてくれた超便利ワザ。
Excel VBAの機能で、マクロの記録 というのがある。
この記録ボタン●を押してから、コードを知りたい操作をExcel上で行う。
記録を終了■し、[マクロの表示]を押すと・・・
なんとコードがVBAで書かれている
私はBasicよくわからないけど、関数のライブラリとしては
C#,C++と同じになっている(というかラッパーが用意されてる)ので
ネットで調べるよりこっちの方が早い。
こんな便利ならVBマクロも勉強しよう、と真剣に思いましたとさ。