|
|
||||
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; } //------------------------------------------------------------------- |