用OLE操作Excel(Wangda补充)

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

我也曾经在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()+"\\test.xls";

//判定文件是否存在

if (FileExists(filename))

{

//询问是否删除

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

mtWarning, TMsgDlgButtons() << mbOK<<mbCancel, 0)==mrOk)

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")<<filename);

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!");

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航