- 在线时间
- 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>
8 y7 s4 }( P v; L/ c% _< > </P>
9 a1 p8 l; W1 S* D5 O< >这是从网上下载的: </P>
# v* v; j) t; {< >Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>
" i( X% s1 Q* T& N) l& y< > </P>
) I" [4 O# y6 V< >据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>+ f! h3 y$ L) M7 ?
< > </P>
. I! N+ F1 ^+ v< >加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>
$ m" {, l9 _/ j* w! V< > C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>
9 g1 U% }9 d7 j< > </P>. Y$ m6 S+ \. C. x' V$ N, E1 R
< >使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>
3 ~& P4 K; q" f< > 在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>2 v/ P4 ~8 \7 `! ]
< > </P>% z4 [& L e' x3 w
< >对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>: p5 Q9 J! q! b" h% N* C
< > </P>5 c4 L" f4 K+ K% Y
< >建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>. J+ F% B4 @) p: J1 k
< >OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>
. S# o5 l5 K( s; U5 g, |* z/ M/ S< >[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>9 ?& W, ?& [5 S. a8 N% }# {
< > C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>
1 P8 i8 a5 h( x/ l# ]% w< > </P># G7 v. M9 y& z: @: t2 B& P" i
< >Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>: k+ h0 P& c. n) `: z/ s o& y2 O
< > </P>) g# V% h0 l; Y8 }! H3 B+ G& q
< >中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
: w$ M) P; t* q( G6 ^# u< > </P>) D. x& L' Y# D5 M' z
< >C++ Builder操纵Excel的具体方法。 </P>
3 l/ J- Y. L$ x% t$ ]< > 首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>( Q! `# l3 {1 @( o- Y1 p9 E
< > </P>: C/ E& p) n& Y" K# w0 ~6 `1 i4 h
< >然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>
7 ~8 R% o$ @4 E7 V2 ?5 G< > </P>7 h/ z; Q# q; [. U A% |
< >为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>( G' }9 ]7 W; F3 N8 q
<P> </P>
1 F4 Y( C' b& x<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>4 f2 |; C$ {7 K6 I
<P>Button1Click()函数中加入如下代码: </P>
' S2 Q x% z. K, n+ F1 D% v j<P> Variant ex,newxls; </P>
% L6 J; i# G$ W. h0 P. ]<P> int i,j=1; </P>: @ X- k! f; N
<P>try </P>
3 e: R/ [$ i. J* \9 L<P>{ </P># W1 v# q, w" I7 {
<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>! S1 o* J& Z% O M, z4 e7 s
<P>} </P>
5 X. c' F* ~- s8 D0 [& P<P>catch(...) </P>! q: S& c( e7 R
<P>{ </P>
9 g1 P1 D, P/ ?! z<P>ShowMessage(″无法启动Excel″); </P>
) w7 x$ J1 G# c. X4 y/ N- t<P>} </P>( D; E( E0 Q9 O7 ^1 ]- l2 O
<P> ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>
9 y9 t" U: _7 g, ^<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>
4 N2 H9 s6 z* p( Q<P> </P>
; }$ a4 e2 O; e$ c0 ?. x! a<P>Table1-〉Active=true; </P>1 a8 X9 o' {1 N
<P> //打开数据库 </P>
/ X* k- N U" t. M8 `<P>Table1-〉First(); </P>3 s9 T; c% _/ S0 m# R/ c6 o8 y
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>* f# }- l! L; H0 K
<P> //将字段名写到工作薄的第一行 </P>
. y/ {. p2 n! _6 ~( Y* M& }<P>{ </P>3 r' U( Z/ i; Z# C7 j! M1 [
<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>
5 L/ O: d; w8 E<P> </P>. i& b, j( f `2 L0 f
<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>
% f6 S5 D* D9 }: @" \* [ q% L9 V8 M<P>} </P># w; ]0 _( G+ G8 Y8 f+ R& Z+ z
<P>while(!Table1-〉Eof) </P>2 _: h+ E9 a5 C! Z" F! u, T) _
<P> //将数据库中的记录依次写到工作薄中 </P>; l9 d" w, d# }9 `
<P>{ </P>
# m; o: ^8 z- L0 b% `<P>j=j+1; </P>8 O! P' {8 D5 R
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>5 n% g4 j( f2 n5 [7 r$ q
<P>{ </P># ^/ H+ r8 c4 X" r
<P> (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>: l: g$ |4 k9 ?( F6 W; ~
<P>(i+1), </P>
: N' k2 G1 ~7 x& H, B& D& H<P> (Variant)Table1-〉Fields-〉AsString); </P>
2 s9 h V3 J3 ^" H7 a<P>} </P>8 y' }0 R' Z9 D4 n
<P>Table1-〉Next(); </P>
/ ^ e$ l; c0 l! a& K$ Z* d<P>} </P>
7 t5 p$ j* M# q1 u: w% [" `<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>
$ [: i: ?" ]0 S( v# H2 S8 U<P> //保存工作薄,filename是工作薄的全文件名 </P>
1 Y, ^# X8 f9 S) o$ B V1 h<P>ex.OleFunction(″Quit″); </P>1 f$ ` b1 }# G" U
<P> //退出Excel,释放OLE对象 </P>' A/ y4 X/ g: x
<P> 注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>
' a/ r6 ~+ Y. c. c& W<P>include ″ComObj.hpp″。 </P>
' M p/ g! N& n' w<P> 运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>
0 Q- j* i1 U9 B8 C<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>" k9 j0 @, H/ d, \5 L7 p, E
<P> 以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P> |
zan
|