用OLE操作Excel(Wangda补充)
我也曾经在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!");
- 上一篇:用OLE操作Excel
- 下一篇:用PcommPro开发串行通信程序