- 在线时间
- 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>
$ K+ R$ ]3 _0 Q: i< > </P>
+ _! i& f! ^0 X< >这是从网上下载的: </P>
" N: n, d+ N) {6 h3 M+ U, Q< >Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>
% ?' Q3 r% e& W6 ]% E5 V! M" j< > </P>
* b9 f1 U8 O$ E< >据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>1 g1 `" t) f, G) p/ ?5 \+ {
< > </P>
) w1 O9 q i: w- B! G< >加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>( e) x: t% H/ I2 _/ F* n
< > C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>
5 B+ ? C) M! u< > </P># u7 V8 Y) ?% F2 m6 ^
< >使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>
6 Y9 g- r, B! P1 U2 d! D* o' T< > 在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>1 M6 Z: Q$ j( f0 h' k: W( j
< > </P>
; m' v! p* j' w8 ]7 s2 s1 L% P< >对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>
4 n# ]0 N9 j5 \9 {< > </P>2 F$ G+ J; B* m
< >建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>7 h# |9 \5 z4 I9 p' ^
< >OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>
r3 @) A) o) q< >[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>
9 J2 V; t& M" k$ T" A< > C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>/ V9 [* o8 J3 Q9 H; v( {+ P. u* E
< > </P>/ P5 w5 j. p' A1 W& i2 ^/ @& G
< >Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>4 C3 m! a0 z" Q! E3 r
< > </P>
3 m5 I5 x& ~0 u, r5 N9 _. Y. V7 Q< >中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
3 v( \' n5 U, U! q; p< > </P> B" ~ f: A" H# p0 P% \. Y4 Z
< >C++ Builder操纵Excel的具体方法。 </P>
& F4 C3 S1 p: Y+ y# |' n7 y< > 首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>
0 Y4 n6 A) P5 @% U& e< > </P>- s" t* D- R8 g: M O) s; W; ^
< >然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>
/ {' @2 m( w) Z$ I" e2 ^< > </P>0 A) H5 q+ p! R* [0 s, n% x$ P u
< >为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>
4 }1 a. }, [, ? d. m<P> </P> p* R# b2 d* m: ^
<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
, A9 X& M# W% L6 z<P>Button1Click()函数中加入如下代码: </P>! a3 [/ _7 k' C
<P> Variant ex,newxls; </P>6 z- K0 [/ h. \
<P> int i,j=1; </P>/ X- V- ~( c* W$ T" M
<P>try </P>
7 C+ d/ R9 C" b! a% K<P>{ </P>; d" R+ M: c q* B+ Q
<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>5 ^- L, b, v' {- m( e/ \
<P>} </P>/ b4 }+ j6 y% {
<P>catch(...) </P>
2 J, k& X( K9 M, X v3 j<P>{ </P>
3 u; y( G" M Q% f' t3 w+ Q<P>ShowMessage(″无法启动Excel″); </P>$ ~* O- T# V& Y; O& J
<P>} </P>9 B% E" R L$ S: \. U
<P> ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P> V: x/ A3 s0 a' I3 L% g8 @# r! o
<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>4 m! r5 p2 O# I# G M
<P> </P>
) Y7 ]1 O/ c9 l+ ]6 d" C) \<P>Table1-〉Active=true; </P>7 h+ A+ D. r8 {, U/ ^4 a
<P> //打开数据库 </P>
' L7 r J& {3 c9 S: a" h, d9 p<P>Table1-〉First(); </P>
1 E2 p# H9 q" W2 _7 p. x$ ?<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>. e$ z$ a- ?1 f8 S! b, _5 J
<P> //将字段名写到工作薄的第一行 </P>
0 d: v& U2 e. U4 b g6 Y& U<P>{ </P>1 L$ X0 h; B$ R; y% B' A
<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>) l( \/ w5 Y4 r
<P> </P>
3 b9 b$ o: K) Q( Q% U<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>
; }" F' T+ W1 Z E0 R' h<P>} </P>8 m' P c4 {5 L( A5 u
<P>while(!Table1-〉Eof) </P>5 b) G' G8 K; F
<P> //将数据库中的记录依次写到工作薄中 </P>
# N) l! | H2 ?6 V<P>{ </P>& L+ y0 n* p+ K# r3 g+ O6 S
<P>j=j+1; </P>
0 _) [: ^' l' [9 ~1 S<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
9 A9 ]# l3 _9 u3 \6 D<P>{ </P>
% i( {! v1 r' u; v9 q w<P> (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>
# S7 ~) |" g4 b% w8 s/ G' J<P>(i+1), </P>
( N0 W7 p6 V( K2 z3 `! b<P> (Variant)Table1-〉Fields-〉AsString); </P>
0 Y7 `# F* @+ }2 l3 p. i$ D- `7 ^<P>} </P>
$ i, W! q* r/ V0 w; R<P>Table1-〉Next(); </P>3 Z1 S' k6 O9 y' ]0 I8 t7 Q. v
<P>} </P>
' b/ v8 g) z! d. N1 L t6 ?<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>
$ T& H0 Q( \+ w$ d+ A8 X<P> //保存工作薄,filename是工作薄的全文件名 </P>
7 ?& \) q |9 X# S<P>ex.OleFunction(″Quit″); </P>
9 b6 I) M8 d4 D4 s# U<P> //退出Excel,释放OLE对象 </P>
' Z/ L) A. H; P! N, B<P> 注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>/ ?' v, J& K% b2 P3 ?2 l; \; T2 [
<P>include ″ComObj.hpp″。 </P>
# n' a$ g" ]7 z<P> 运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>
" l. d! g6 i( y<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>
) U6 ^- t7 D3 z. i<P> 以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P> |
zan
|