- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< >c++builder如何和excel交换数据?</P>! I) t; m# d4 a8 A; z
< > </P>
& y T+ ?) R3 w& e0 M< >这是从网上下载的: </P>) h/ t+ h+ m& S$ W1 h
< >Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>
- M' k% T7 L" x! Q1 L< > </P>; p2 ^3 h6 O/ z* s0 O) h
< >据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>$ T8 n1 X9 c9 q3 T
< > </P>
# {* M3 y) w# v* ^/ j9 ]' l< >加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>
1 M) g! o& ^( @ R$ G7 p< > C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>! g7 r2 {/ [+ J* D2 W9 a/ D, \
< > </P># `. r: z# d" g5 w! W( T
< >使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>2 A6 O# Q; F3 l. _4 _5 Y
< > 在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>6 f+ c# K0 J. j) `/ P- G' P; `
< > </P>/ M* r2 y( L" n) D
< >对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>/ V% R5 S7 V) x' E, a* v
< > </P>
, x4 A0 R9 m! [& v< >建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>. V f/ w7 z0 Z1 R* m
< >OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>: i* j; L- u: p) Z8 j0 F; P
< >[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>9 `8 W) g) Q9 P: z# d. j
< > C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>' Y3 Y z3 [/ f; E: Q: P% w7 s
< > </P>& T) e/ a, @+ I7 |
< >Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>
; i2 J- M9 H- F5 M* p< > </P>
1 R- ~4 b u1 G% ]< >中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
9 w9 u+ i3 C4 l4 k" c< > </P>
/ Y) o& w4 ^+ |< >C++ Builder操纵Excel的具体方法。 </P>2 O4 K1 Z9 e9 Q& A: m* B& J4 n- Y- x- \
< > 首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>
7 A& r$ k- E$ I# @. b% e< > </P>
7 i5 l4 Y a, k$ w. G6 s# v< >然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>, K/ w/ e7 B8 I' b
< > </P>1 g0 _* N& U" F2 B( g- u
< >为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>2 k9 U6 m U" o( D$ c" m
<P> </P>
; o' X: v4 V9 I<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
5 l4 t3 D) E1 p<P>Button1Click()函数中加入如下代码: </P>6 Z# Z6 e- [; a% ^- w6 ?5 X
<P> Variant ex,newxls; </P>1 o+ B- h8 X G
<P> int i,j=1; </P>* p- m1 I9 A$ v' L1 r
<P>try </P>+ k6 V: ^, H- g6 s& L' h" l
<P>{ </P>' ^) _& `7 Z6 W4 p8 ~* _
<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>* Z% n- @' |' ?7 h
<P>} </P>
2 r3 V3 [% W! [ N<P>catch(...) </P>) y7 p& {. R7 m+ v
<P>{ </P>
# ]8 d+ ~" w/ v/ _* h) l5 V+ d* A<P>ShowMessage(″无法启动Excel″); </P>5 ~: a- h) b; k% p( z6 O/ S
<P>} </P>
' c T6 p9 x, `" F<P> ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>
0 |: Z% [9 w2 C4 L; B<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>
5 h+ |: b! o: f: }8 r2 V<P> </P> |; B# F" i4 f' _" @4 a. `8 b
<P>Table1-〉Active=true; </P>
! Q- W+ n, r o, B3 d1 C% O<P> //打开数据库 </P> ^2 p4 T0 N' U0 ~& z# A
<P>Table1-〉First(); </P>; J2 {( m& j. ~5 \( S9 S, r' L- W* ?
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
, [" n1 x* N( x( p; x9 Y8 b<P> //将字段名写到工作薄的第一行 </P>
% d" c4 } d7 F |<P>{ </P>
. Q7 S/ a* Q% j$ b. P. K, g<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>- m. f; h/ }6 D0 Z3 ~# x
<P> </P>
3 `& M& N/ s3 {5 X<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>
& [7 C7 A/ R0 Y" Y! v<P>} </P>
+ M* B6 n1 i1 ?" J+ d<P>while(!Table1-〉Eof) </P>9 B" u0 s% G; k: V1 r
<P> //将数据库中的记录依次写到工作薄中 </P>* \( E9 n9 j& M
<P>{ </P>
# i$ F. g: g& j<P>j=j+1; </P>
. i8 y3 g1 i; P& c* V6 K& p; h- }* G<P>for(i=0;i〈Table1-〉FieldCount;i++) </P># j' U n1 X5 V f& Y
<P>{ </P>
% X- J5 ], b8 g<P> (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>5 r4 ^, Q2 M1 U7 P
<P>(i+1), </P>
6 H2 E3 ]; F9 z9 @( }& v5 f' u' H<P> (Variant)Table1-〉Fields-〉AsString); </P>" M# x7 k( p4 l% w; ~" M
<P>} </P>0 e# F' u. R, Q, o" A% x: p
<P>Table1-〉Next(); </P>
/ K1 J/ z3 n3 }+ N/ z/ h; x<P>} </P>
! m$ N' M5 J" @0 f<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>1 n) ?( p3 z) y- ~, P6 {
<P> //保存工作薄,filename是工作薄的全文件名 </P># z, J; x1 ?1 T
<P>ex.OleFunction(″Quit″); </P>
) N5 P! F5 u: v: V; }<P> //退出Excel,释放OLE对象 </P>
* Y; v# v6 l( q- G; x<P> 注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>% N& Z+ m+ c# `6 x0 \* F
<P>include ″ComObj.hpp″。 </P>
- Q4 g! E3 F1 q% ? n0 n<P> 运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>
$ P0 u0 w9 K% u3 u8 Z+ T: j7 F<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>
3 e7 Q+ F( Q) z& U! X, g. [$ x<P> 以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P> |
zan
|