首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

C++ Builder XE2 操作 Excel 有关问题

2012-03-30 
C++ Builder XE2 操作 Excel 问题最近装了 BDS XE2 用原来的OLE方法操纵Excel完全失效!!有什么办法?下面的

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了:)

热点排行