Excelをコントロールする

はじめに

基本的にVBが使える環境ならVBで行うべき。

VCで扱うには資料が基本的に足りないし、不親切。

開発環境の設定

下の文をソースに入れると使えるようになる

 #import "C:\\Program Files\\Microsoft Office\\Office\\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")   
 #import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" no_namespace
 #import "C:\\Program Files\\Microsoft Office\\Office\\Excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces
 
 using namespace Excel;

C:\\Program Files.... 部分は環境によって変更する必要はある

ビルドするとExcel9.tlhとExcel9.tliが出来る。

COMオートメーションとかなんとかいうやつらしいので

プログラムの始めに、必ず CoInitialize か CoInitializeEx を 終了時に CoUninitialize か CoUninitializeExを 呼び出す必要があります。

サンプル
 CExcel::CExcel(){
    if(FAILED(::CoInitialize(NULL))){
         throw;
    }
    ・・・
    ・・・
 }
 CExcel::~CExcel(){
    ・・・
    ・・・
    ::CoUninitialize();
 }

Helpについて

OfficeのCDに入っている''VBAXL9.CHM''を参考にする。

但しVBでの使用を前提にしかかかれていない。

各種関数の調べ方

  • 基本的な操作の仕方は数多あるExcelVBA系のサイトから調べる。
    • Googleで引っ掛ければよい。
  • 関数はVBのヘルプに書いてあったとおりの名前でVCで使えるとは限らない。
    • 使用したい関数名でExcel9.tlh内を検索して、それっぽい関数を探す。
 ex) VB:FitToPagesTall -> VC:GetFitToPagesTall()とPutFitToPagesTall()
  • 後は使ってみる。トライ&エラーでがんばる

_variant_tの使い方

関数によってはVariant型で値を返すものがある。

VCには当然そんな型はないのでクラス_variant_tで代用する。

 _variant_t vFitH = pSheet->PageSetup->GetFitToPagesTall()

上記のように値を受け取ったとすると以下のような感じになる

 vFitH.vt 値の型(VT_EMPTY/VT_I4/VT_BOOL等いろいろ)
 
 if( vFitH.vt == VT_BOOL ){
     bool result = vFitH.bVal
 }
 
 if( vFitH.vt == VT_I4 ){
     long result = vFitH.lVal
 }

詳細はMSDNライブラリを参照すること