龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

用OLE操作Excel(Wangda补充)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
我也曾经在CSDN上写过BCB调用Excel的文章。思想和站长的《用OLE操作Excel(C++ Builder版)》如出一辙。 假如我们用2K的操作系统,可以发现假如只是用ExcelApp.PR("Quit")后,Excel线程还在,这样,

  我也曾经在CSDN上写过BCB调用Excel的文章。思想和站长的《用OLE操作Excel(C++ Builder版)》如出一辙。

  

假如我们用2K的操作系统,可以发现假如只是用ExcelApp.PR("Quit")后,Excel线程还在,这样,假如应用程序不退出,被调用的EXCEL文件就无法在SHELL下用EXCEL打开。因此,我的BCB调用EXCEL是这样的在最后要加上一点工作,就是把所有的VARIANT变量都要设置为UNASSIGNED,我的一个小例子如下,新建立一个EXCEL文件,显示有多少个表单(sheet),然后添一个表单并命名为test,然后给(1,2)单元赋值。最后删除一个sheet.

  

==============================================================================

  

h文件定义宏

  

#define OPG OlePropertyGet

  

#define OPS OlePropertySet

  

#define OFN OleFunction

  

#define OPR OleProcedure

  

#define PR Procedure

  

  

添加变量:

  

Variant Axl,Workbook,AxSheet,nms,bef,aft;

  

  

  

cpp函数

  

void __fastcall TForm1::Button1Click(TObject *Sender)

  

{

  

//赋值内容

  

AnsiString s="hello!";

  

//文件路径和保存名称

  

AnsiString filename=GetCurrentDir()+"est.xls";

  

//判定文件是否存在

  

if (FileExists(filename))

  

{

  

//询问是否删除

  

if (MessageDlg("文件已经存在,是否删除?",

  

mtWarning, TMsgDlgButtons() << mbOK<

  

DeleteFile(filename);

  

else

  

{ShowMessage("放弃操作");return;}

  

}

  

//建立excel连接

  

Axl= Variant::CreateObject("Excel.Application");

  

Axl.OPS("Visible",false);

  

Workbook= Axl.OPG("Workbooks");

  

//创建一个新的excel工作本(文件)

  

Workbook.Exec(PR("Add"));

  

Workbook=Axl.OPG("ActiveWorkbook");

  

//显示存在的sheet数目

  

int count=Workbook.OPG("sheets").OPG("count");

  

ShowMessage(IntToStr(count)+"个表");

  

//添加一个Sheet,命名为test

  

aft=Workbook.OPG("sheets",count);

  

Workbook.OPG("sheets").OPR("Add",bef.NoParam(),aft);

  

AxSheet=Workbook.OPG("ActiveSheet");

  

//Rename

  

AxSheet.OPS("Name","test");

  

//给单元1,2赋值

  

AxSheet.OPG("Cells")

  

.OPG("Item",(Variant)1,(Variant)2)

  

.OPS("Value",s.c_str());

  

// .Exec(PropertySet("Value")<< s.c_str());

  

//以上两种方式都可以

  

  

//选择第一张sheet

  

int sheetnum=1;

  

AxSheet=Workbook.OPG("sheets",sheetnum);

  

//选择名字为sheet2的表单

  

AnsiString shname="sheet2";

  

  

AxSheet=Workbook.OPG("sheets",shname.c_str());

  

//关闭警告提示

  

Workbook.OPG("Application").OPS("DisplayAlerts",false);

  

//删除选定表单

  

AxSheet.OFN("Delete");

  

//打开警告提示

  

Workbook.OPG("Application").OPS("DisplayAlerts",false);

  

//保存文件,两种方式都可以

  

//Workbook.Exec(PR("SaveAs")<

  

Workbook.OPR("SaveAs",filename.c_str());

  

//结束退出

  

Workbook.OPR("Close");

  

Axl.OFN("Quit");

  

//结束,假如没有如下代码,EXCEL线程直到应用程序退出才结束。

  

Axl=Unassigned;

  

Workbook=Unassigned;

  

AxSheet=Unassigned;

  

bef=Unassigned;

  

aft=Unassigned;

  

nms=Unassigned;

  

ShowMessage("Well Done boy!");

  

精彩图集

赞助商链接