egaprama1986のブログ

egaprama1986のブログ

ブログの説明を入力します。

Amebaでブログを始めよう!
はじめてのVisual Studio 2008 Professional Edition対応 (TECHNICAL MASTER)/
¥2,940
A

第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マクロも勉強しよう、と真剣に思いましたとさ。
...