- 在线时间
- 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>
( x+ H6 d; {" \4 T2 X, h4 Y: t. n< > </P>
$ l! g9 P/ ?9 K3 V< >这是从网上下载的: </P>
. J' Z% m: w, a$ c0 r. x+ V< >Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>+ k1 Y' | q( c
< > </P>
% f3 A( Y' K* r* r& w. Q< >据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>
8 `3 w" D5 Q+ d6 R' S O< > </P>' Z |- ]$ p+ n
< >加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>
: ]. e6 h ^' \( v( |' C< > C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>
4 L& T* X% F+ h" Z3 O4 j/ M w< > </P>) q: L+ }# z! Y. ]' U
< >使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>4 r3 h5 S/ l3 `; ?" T
< > 在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>/ y) P7 X3 f& F% L9 U8 l* u
< > </P>
% b0 f2 W' o) Z% V0 D< >对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>! U/ g5 Q* z5 g; K1 G) o/ B% W
< > </P>
7 q7 r% ^! x2 Y9 e< >建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>
: n# _# x( \9 b& K< >OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>7 T' y" v& r2 E
< >[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>
: I1 `: Y( [& u1 K- T2 J< > C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>
' n$ D/ q! j- r1 L& p% k9 P9 o< > </P>
! ^ g& B' S8 P" _+ N; L, A9 u# S< >Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>
4 M0 u, J8 c- T+ A< > </P>
# Q$ d3 |( @' Z3 r$ U/ k5 y< >中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
: ]* m! C5 C7 ?8 e0 s5 e7 B4 O' f< > </P>1 ~0 J* u* `; O. G* F" T
< >C++ Builder操纵Excel的具体方法。 </P>
1 p( B d) n# z< > 首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>
v1 m% R6 ~) |5 _< > </P>. `% p# r" X; m- s0 d) K7 ~
< >然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>6 c: s! F' L0 M/ ~! z, P* L6 X7 T! M
< > </P>
4 V" Z* D- y: Q4 U( @7 ~< >为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>" s+ z$ N: R; b4 p4 o
<P> </P>/ U2 ] |4 P- \& E w; F: v% B7 e8 i
<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
: r `# D; X! M# u- k# ]/ o<P>Button1Click()函数中加入如下代码: </P> q% D( T& g% l% V9 `1 s2 M% a, G
<P> Variant ex,newxls; </P>
, u7 O; N, }0 S3 l<P> int i,j=1; </P>/ Y! ?: N# P8 S8 F: G
<P>try </P>
" G, h* X) O! Z( F' X ^+ r<P>{ </P>
- ?7 k: o! k* V) ^; T+ U# X<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>5 ~1 l; y6 f' f& l& D
<P>} </P>
( ]9 L/ G5 W) t4 S5 w# U% [<P>catch(...) </P>
5 }. y$ a q: C. w5 ~/ k<P>{ </P>
2 q9 r7 i. @) d7 w u<P>ShowMessage(″无法启动Excel″); </P>
7 s% ?0 @) @4 G, ?/ o: U8 ]<P>} </P>, |1 q$ C( T5 r/ C8 [
<P> ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>) ~ ]' A( s$ y9 [) T. o
<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>
}# a4 \4 M* K( Y! H V<P> </P>6 a8 a1 u8 S9 n3 ~4 F
<P>Table1-〉Active=true; </P>
6 L$ C& e* \& Q3 c1 c! m t<P> //打开数据库 </P>
+ b- o# Z$ }* d; L, n<P>Table1-〉First(); </P>' C# d7 r" ?$ r% d9 F
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
0 x. z* U+ k5 a/ L! o<P> //将字段名写到工作薄的第一行 </P>
. g8 }' r+ V0 u/ T<P>{ </P>
4 m; M) B- p, e0 l<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>4 r3 p) F b- H6 X
<P> </P>7 X7 \7 S3 f; ^% n$ ^
<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>
0 n3 R9 ^4 f5 L h, [, M8 {<P>} </P>
$ r6 _* k5 y: ~<P>while(!Table1-〉Eof) </P>, z% w, R: v0 b1 X( H
<P> //将数据库中的记录依次写到工作薄中 </P>9 Z) D& K& n4 k F1 U* F3 D
<P>{ </P>
9 `4 \6 w' r X. P<P>j=j+1; </P>* ?! [+ l9 V% d! B8 N2 E
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>$ p2 T1 Y1 z+ Q, x( |+ R
<P>{ </P># Y) D4 a t0 Q$ m
<P> (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>
0 n: R3 ? Z0 J<P>(i+1), </P>
+ f' S; c8 T* d" A<P> (Variant)Table1-〉Fields-〉AsString); </P>- q( b+ A+ z0 N! f
<P>} </P>" W, u: c t: Y& C
<P>Table1-〉Next(); </P>7 a1 d. Y- E- f B' @
<P>} </P>
9 ]+ g4 f3 ?, H6 A, u# {<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>
7 q0 f- h z5 y<P> //保存工作薄,filename是工作薄的全文件名 </P>
5 a( ?1 U4 [) |2 k- j/ L5 o7 X( q<P>ex.OleFunction(″Quit″); </P>4 {7 h: O* \ I& I- H
<P> //退出Excel,释放OLE对象 </P>
' `3 A8 M4 A, T) Y) H<P> 注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>
7 I# S. H9 v: K* y2 E+ F<P>include ″ComObj.hpp″。 </P>
) `" h5 }9 L4 ]4 h, C<P> 运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>- i1 w/ B5 o- l. J8 c v
<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>
}5 h5 M+ A0 A7 C<P> 以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P> |
zan
|