はじめに
基本的に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ライブラリを参照すること