用OLE操作Excel(Wangda补充)

发布时间:2014-10-25 2:19:52
来源:分享查询网

我也曾经在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,命名为testaft=Workbook.OPG("sheets",count);Workbook.OPG("sheets").OPR("Add",bef.NoParam(),aft);AxSheet=Workbook.OPG("ActiveSheet");//RenameAxSheet.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());//以上两种方式都可以//选择第一张sheetint 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!");

返回顶部
查看电脑版