用OLE操作Excel(Wangda补充)

用OLE操作Excel(Wangda补充)

作者: Wangda ,如转载请保证本文档的完整性,并注明出处。
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=543
我也曾经在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!");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值