builder自带的office2k组件调用word含参数的宏的问题
builder中word_2K_SRVR.h头文件中定义的函数为:
TVariant __fastcall Run(BSTR MacroName/*[in]*/, VARIANT* varg1/*[in,opt]*/,
VARIANT* varg2/*[in,opt]*/, VARIANT* varg3/*[in,opt]*/,
VARIANT* varg4/*[in,opt]*/, VARIANT* varg5/*[in,opt]*/,
VARIANT* varg6/*[in,opt]*/, VARIANT* varg7/*[in,opt]*/,
VARIANT* varg8/*[in,opt]*/, VARIANT* varg9/*[in,opt]*/,
VARIANT* varg10/*[in,opt]*/, VARIANT* varg11/*[in,opt]*/,
VARIANT* varg12/*[in,opt]*/, VARIANT* varg13/*[in,opt]*/,
VARIANT* varg14/*[in,opt]*/, VARIANT* varg15/*[in,opt]*/,
VARIANT* varg16/*[in,opt]*/, VARIANT* varg17/*[in,opt]*/,
VARIANT* varg18/*[in,opt]*/, VARIANT* varg19/*[in,opt]*/,
VARIANT* varg20/*[in,opt]*/, VARIANT* varg21/*[in,opt]*/,
VARIANT* varg22/*[in,opt]*/, VARIANT* varg23/*[in,opt]*/,
VARIANT* varg24/*[in,opt]*/, VARIANT* varg25/*[in,opt]*/,
VARIANT* varg26/*[in,opt]*/, VARIANT* varg27/*[in,opt]*/,
VARIANT* varg28/*[in,opt]*/, VARIANT* varg29/*[in,opt]*/,
VARIANT* varg30/*[in,opt]*/)
在C++builder中添加wordapplication组件,打开word文档后,通过上述函数调用word宏Macro1(str as string),该宏已定义好。调用方法如下:
AnsiString strDate=DateToStr(Date());
Variant aaa=Variant(strDate);
WordApplication->Run(StringToOleStr("Macro1"),aaa);
执行后有以下错误报告:
[C++ Error] Unit1.cpp(28): E2193 Too few parameters in call to '_fastcall TWordApplication::Run(wchar_t *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *,tagVARIANT *)
急问各位TX解决知道。
[解决办法]
- C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){ // 启动WORD WordApplication1->Connect(); VARIANT v; VariantInit(&v); V_BSTR(&v) = SysAllocString(L"C:\\ccrun\\123.doc"); V_VT(&v) = VT_BSTR; // 打开指定的文档 WordApplication1->Documents->Open(&v); VariantClear(&v); String strValue = DateToStr(Date()); V_BSTR(&v) = SysAllocString(WideString(strValue).c_bstr()); V_VT(&v) = VT_BSTR; // 运行文档中的宏(带一个参数) // WORD_2K中这个BT的方法,竟然要写够31个参数才行 WordApplication1->Run( WideString("Macro1").c_bstr(), &v, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam ); VariantClear(&v); // 关闭WORD WordApplication1->Disconnect();}
[解决办法]