C++Builder控制EXCEL的问题
我需要从SQLServer导出一个含有多张表的数据库到一个EXCEL文件,每一张表建立一个SHEET,请问怎么在程序里实现建立一个EXCEL一个工作簿的多个SHEET呢?
请高手指点!小弟郁闷中!
PS:急!!!!!
问题点数:100、回复次数:9Top
1 楼kwokwinglau(每天前进1%)回复于 2005-07-09 08:47:01 得分 0
Variant Ex,Wb,Sh1,aft;
String WorkerID;
Ex=Variant::CreateObject("Excel.Application");
Wb=Ex.PG("ActiveWorkBook");
aft=Wb.PG("Sheets",count);
Wb.PG("sheets","Sheet1").PR("copy",aft); //复制Sheet1
Sh1=Wb.PG("ActiveSheet");
Sh1.PS("Name",WorkerID.c_str()); //并改名Top
2 楼kwokwinglau(每天前进1%)回复于 2005-07-09 08:47:30 得分 0
补充:
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedureTop
3 楼zhhhhao(dd)回复于 2005-09-27 11:15:47 得分 0
接下来怎么建立个新的excel文件,怎么在该新文件中建立新表呢Top
4 楼xibingwuqing(惜冰无情)回复于 2005-09-27 11:43:03 得分 100
要在应用程序中控制Excel2000的运行,首先必须在编制自动化客户程序时使其头文件要包含Comobj.hpp和Utilcls.h。
即:#include<Comobj.hpp>
#include<Utilcls.h>
C++ Builder开发者把Excel自动化对象的功能包装在下面的四个Ole Object Class函数中,应用人员可以很方便地进行调用。
设置对象属性:Variant OlePropertySet(属性名,参数……);
获得对象属性:void OlePropertyGet(属性名,参数……);
调用对象方法:1) Variant OleFunction(函数名,参数……);
2) void OleProcedure(过程名,参数……);
C++ Builder中使用OLE控制Excel2000,必须掌握Excel2000的自动化对象及Microsoft Word Visual Basic帮助文件中的关于Excel的对象、方法和属性。对象是一个Excel元素,属性是对象的一个特性或操作的一个方面,方法是对象可以进行的动作。
1、Excel中常用的对象是:Application,Workbooks,Worksheets等。
(1) 创建应用对象:如:
Variant ex;
ex=Variant::CreateObject ("Excel.Application");
或者 ex=CreateOleObject ("Excel.Application");
(2) 创建工作簿对象:
Variant wb;
wb=ex.OlePropertyGet("ActiveWorkBook");
(3) 创建工作表对象:
Variant sheet;
sheet=wb.OlePropertyGet("ActiveSheet");
(4) 创建区域对象:
Variant range;
range=sheet.OlePropertyGet("Range","A1:A10");
2、常用的属性操作:
(1)新建EXCEL文件:
(a):新建系统模板的工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add") //默认工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add",1) //单工作表
ex.OlePropertyGet("workbooks").OleFunction("Add",2) //图表
ex.OlePropertyGet("workbooks").OleFunction("Add",3) //宏表
ex.OlePropertyGet("workbooks").OleFunction("Add",4) //国际通用宏表
ex.OlePropertyGet("workbooks").OleFunction("Add",5) //与默认的相同
ex.OlePropertyGet("workbooks").OleFunction("Add",6) //工作簿且只有一个表
(b):新建自己创建的模板的工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add","C:\\WINDOWS\\Profiles\\test2\\Application Data\\Microsoft\\Templates\\result.xlt"); // 后面写上模板的完全路径,注意“\\”
(2)打开工作簿:
ex.OlePropertyGet("workbooks").OleFunction("open","路径名.xls")
(3)保存工作簿:
wb.OleFunction("Save"); //表格保存
wb..OleFunction("SaveAs","文件名"); //表格保存为,文件路径注意用“\\”
(4)退出EXCEL:
ex.OleFunction ("Quit");
(5)设置字体:
(a):设置单元格字体
sheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Font").OlePropertySet("Name","隶书");
sheet.OlePropertyGet("Cells",2,3).OlePropertyGet("Font").OlePropertySet("size",28);
(b):设置所选区域字体
range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("size",28); range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("Color",
RGB(0,0,255));
其中参数的设置:
Font---Name : “隶书” //字体名称
----Size : 12 //字体大小
----Color : RGB(*,*,*) //颜色
-----Underline : true/false //下划线
-----Italic: true/false //斜体
(6)单元格的合并:
(a) range1=sheet.OlePropertyGet("Range", "A1:A2"); //A1和A2单元格合并
(b) AnsiString Str="A"+IntToStr(j)+":"+"C"+IntToStr(j);
range1=sheet.OlePropertyGet("Range",Str); //可以用变量控制单元格合并
range1.OleFunction("Merge" , false);
(7)赋值语句:
(a):指定单元格赋值
sheet.OlePropertyGet("Cells",3,6).OlePropertySet("Value",str);
sheet.OlePropertyGet("Cells",j,1).OlePropertySet("Value","共查到记录:"+IntToStr(j-6));
(b):所选区域单元格赋值
range.OlePropertyGet("Cells").OlePropertySet("Value",10);
(c):所选区域行赋值
range.OlePropertyGet("Rows",1).OlePropertySet("Value",1234);
(d):工作表列赋值
sheet.OlePropertyGet("Columns",1).OlePropertySet("Value",1234);
(8)取值语句:
AnsiString abc=sheet.OlePropertyGet("Cells",120,1).OlePropertyGet("Value");
(9)区域选择:
range.OlePropertyGet("Cells").OleFunction("Select");
(10)窗口属性:
(a)显示属性
ex.OlePropertySet("Windowstate",3); //最大化显示
参数 1---------xlNormal //正常显示
2---------xlMinimized //最小化显示
3---------xlMaximized //最大化显示
(b)状态栏属性
ex.OlePropertySet ("StatusBar","您好,请您稍等。正在查询!");
ex.OlePropertySet ("StatusBar", false); //还原成默认值
(c)标题属性:
ex.OlePropertySet("Caption","查询系统");
Top
5 楼zhhhhao(dd)回复于 2005-09-27 13:52:05 得分 0
到底是#include "vcl\utilcls.h"还是“utilcls.h"Top
6 楼zhhhhao(dd)回复于 2005-09-27 13:54:04 得分 0
这篇文章看过了,我就想知道我在建好的excel摸板中怎么加表呢,是建立表对象后加还是直接用add属性加,但是添加表的名字怎么定义Top
7 楼xibingwuqing(惜冰无情)回复于 2005-09-27 17:19:55 得分 0
我在文件里加的是#include<Utilcls.h>,另一个可能也行Top
8 楼wrmfwtomcom(为人民服务:))回复于 2005-09-27 22:55:45 得分 0
希望等C++Builder的新版本出来之后,对Excel的操作能象Delphi中的那么容易,不用写那么多麻烦的OlePropertyGet ...
Top
9 楼zhhhhao(dd)回复于 2005-09-27 23:22:20 得分 0
怎么用语句在excel文件中加表,表的名字我自己定义,Top




