C++ Builder XE2 操作 Excel 问题
最近装了 BDS XE2 用原来的OLE方法操纵Excel完全失效!!有什么办法?下面的方法在C++ Builder 2010 中均运行正常!
- C/C++ code
//---------------------------------------#include <vcl.h>#pragma hdrstop#include <utilcls.h>#include <System.Win.Comobj.hpp>#include "Unit1.h"//---------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"#define PG OlePropertyGet#define PS OlePropertySet#define FN OleFunction#define PR OleProcedureTForm1 *Form1;Variant EA,WB,WS;//---------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ try { EA =Variant::CreateObject("Excel.Application"); //创建Excel应用对象 } catch(...) { return; } EA.PS("Visible",(Variant)true); /***************************************************/ // // 下面三个方法运行时均提示 “不正确的变量类型”(其它方法还没试过,上面的方法没问题) // /***************************************************/ EA.PG("WorkBooks").FN("Add","F:\\temp.xlt",6); EA.PG("WorkBooks").FN("Open","F:\\1.xls"); WB.PR("SaveAs","F:\\1.xls");}//------------------急!!!!
[解决办法]
我的建议很简单,OLE的代码操作中,涉及字符串的地方,一律用WideString即可,如:
- C/C++ code
EA.PG("WorkBooks").FN("Add", WideString("F:\\temp.xlt"), 6);EA.PG("WorkBooks").FN("Open", WideString("F:\\1.xls"));WB.PR("SaveAs", WideString("F:\\1.xls"));
[解决办法]
传入参数的地方,如果传入的是字符串,那建议用:
TVariantNoClear给包上:)比如:
EA.PG("WorkBooks").FN("Add", "F:\\temp.xlt", 6);
改为:
EA.PG("WorkBooks").FN("Add", TVariantNoClear("F:\\temp.xlt"), 6);
这样就OK了:)