ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

OLE で エクセルのデータを C++Builder で取得 

更新 : 2008/06/15

 



解説:
C++Builder から Excel ファイルを開いてデータを挿入する Tips は以前公開しました。今回は既に Excel ファイルが開いている場合、セルからデータを取得して C++Builder に表示する処理を記述してみます。
OlePropertyGet、OleFunction を使ったコーディングは載せましたので、ここでは、Exec を使って OLE プロシージャを呼び出してみます。

使用例:
既に起動している Excel ファイル("Book1.xls" など) のセル("A1")から値を取得して、StringGrid に表示してみます(準備として Excel を起動して "Sheet1" の "A1" に適当な数字を入力しておいてください)。

コンポーネントは、 Button と StringGrid を適当に配置しておわりです。

コーディングは、Button1 の OnClick イベントで、起動中の Excel オブジェクトを
GetActiveOleObject で取得して、"Sheet1" にアクセスしています。
次に Range("A1") から値を取得します。値は StringGrid に表示して、オブジェクトを解放して終了です。

Excel が開いていない場合、どのようにすれば良いのか? また複数のデータを扱うには? いろいろ試してみてください。

//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //GetActiveOleObject は現在実行中の登録されている OLE オブジェクトへの
    //IDispatch 型インターフェースへの参照を取得します。

    //起動中オブジェクトを取得
    Variant objExcel = GetActiveOleObject("Excel.Application");

    //ワークシートコレクションを取得
    Variant worksheets = objExcel.Exec(PropertyGet("WorkSheets"));
    //Sheet1 を取得
    Variant worksheet = worksheets.Exec(PropertyGet("Item") << Variant("Sheet1"));
    //Range("A1") を取得
    Variant cell = worksheet.Exec(PropertyGet("Range") << Variant("A1"));
    //値を取得
    Variant value = cell.Exec(PropertyGet("Value"));
    //StringGridに代入
    StringGrid1->Cells[1][1] = value;

    //オブジェクトを解放
    objExcel = Unassigned;
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.