用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()+"\\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!");

时间: 2024-05-19 02:11:09

用OLE操作Excel(Wangda补充)的相关文章

用OLE操作Excel

用OLE操作Excel(目前最全的资料)(04.2.19更新) 本文档部分资料来自互联网,大部分是ccrun(老妖)在Excel中通过录制宏-->察看宏代码-->转为CB代码而来.本文档不断更新中.欢迎大家关注. 要在应用程序中控制Excel的运行,首先必须在编制自动化客户程序时包含Comobj.hpp #include "Comobj.hpp" C++ Builder把Excel自动化对象的功能包装在下面的四个Ole Object Class函数中,应用人员可以很方便地进

在SWT中使用OLE操作Excel(三)——设置单元格背景色

packagecom.jrkui.example.excel; import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.ole.win32.OLE;import org.eclipse.swt.ole.win32.OleAutomation;import org.eclipse.swt.ole.win32.OleClientSite;import org.eclipse.

c++-C++ OLE操作EXCEL,使用指定的数据生成折线图

问题描述 C++ OLE操作EXCEL,使用指定的数据生成折线图 请教示例外码,最好能带注释的,还有就是数据并不确定能有多少个,我先做的事把数据写进EXCEL表格中,然后生成折线图,所以请教大神如何生成折线图 解决方案 http://zhidao.baidu.com/link?url=yUOoaVftMmbtTOa2CLBledLggSd-MarBEREtZmcMgVspNwP3g4jdjP6yvO7iCm2o6bhBXBm08wVfapTBlOXsiWMmNhxxXt6mgKaEjLwq42W

ole-C/C++中用OLE操作Excel的问题,特别慢怎么提高效率啊

问题描述 C/C++中用OLE操作Excel的问题,特别慢怎么提高效率啊 最近公司要求做一个小工具,就是两个Excel文档,父文档A和子文档B和进行匹配,如果一行数据A和B都有就在B中改该行的背景颜色,具体功能我都做出来了但是速度很慢啊!两个文档一个只有一百多行数据,另一个只有几十行.怎么还要好几分钟呢! 解决方案 要看你的代码怎么写的,感觉可能你调用的方式不对,每操作一行存盘一次了吧. 解决方案二: 这种东西根本不用大费周章用c++,用vba写点脚本也不至于这么慢. 解决方案三: OLE操作E

在SWT中使用OLE操作Excel(五):设置单元格的字体格式

设置字体格式是常见的需求 package com.jrkui.example.excel; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.OleClientSite;

在SWT中使用OLE操作Excel(四):使单元格或列自动调整宽度

在实际应用中,常常会遇到单元格的值比较长而被遮住,用户不得不手动调整宽度,如果能通过程序就自动调整宽度就会很方便了.实际上在通过OleView.exe这个工具查询得知Range有AutoFit的方法,它的Id是0x000000ed,那么如果获得了Range的引用,只要调用AutoFit这个方法,就可以自动调整宽度了.下面请看代码与示例效果: package com.jrkui.example.excel; import org.eclipse.swt.SWT; import org.eclips

在SWT中使用OLE操作Excel(二):为Excel的A1单元格赋值

代码: packagecom.jrkui.example.excel; import java.io.File;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.ole.win32.OLE;import org.eclipse.swt.ole.win32.OleAutomation;import org.eclipse.swt.ole.win32.OleClient

在SWT中使用OLE操作Excel(一):使Excel嵌入到SWT窗口中

使用的Eclipse版本:3.3.1 使用的jdk版本:5.0 packagecom.jrkui.example.excel; import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.ole.win32.OLE;import org.eclipse.swt.ole.win32.OleClientSite;import org.eclipse.swt.ole.win32.O

swt ole-Java SWT操作Excel(OLE),如何给单元格区域赋值?

问题描述 Java SWT操作Excel(OLE),如何给单元格区域赋值? import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.Ol