数学建模社区-数学中国

标题: c++builder如何和excel交换数据? [打印本页]

作者: 韩冰    时间: 2005-1-26 01:22
标题: c++builder如何和excel交换数据?
<>c++builder如何和excel交换数据?</P>
0 C6 V3 a3 k# ]5 t* U( X) H* X<>  </P>5 y% V4 a$ ?- J' I' V9 O
<>这是从网上下载的: </P>  ^( R) {- z3 _
<>Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>' E; f6 Z' A- A
<>  </P>
  B0 B, l/ h! M' t) u7 O<>据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>
- V7 z  [: j1 c3 a<>  </P>
( s% Y" ^' X2 H  i) @<>加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>( T1 k$ e: I# c3 [( w
<>  C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>
" f1 G' U2 z5 G3 ?1 f. j<>  </P>
+ p0 a% {1 Q# a<>使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>
* ?- j+ E9 E# R5 |<>  在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>8 a: K5 F1 L8 W7 S" t' Z, H7 [4 r
<>  </P>4 z2 c9 r, y+ V9 P' e
<>对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>& m+ P. I8 x2 W6 G+ r
<>  </P># B" C0 x2 U2 V
<>建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>2 s$ |- L4 L1 W+ Z! j9 U
<>OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>" }: D# c8 B- ?" X$ b+ g7 e2 b# t
<>[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P># s6 v9 U; |& Z" o$ @
<>  C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>
( }/ Y6 C2 N5 a0 W( L<>  </P>$ U8 L2 ^% W3 V7 i% l' o0 A
<>Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>
5 x: j- \+ w. j) z<>  </P>
& a2 z# J, W& f' G<>中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
( r( W$ E- u8 U% l) K8 l<>  </P>
6 A4 d& a: ]1 e& o<>C++ Builder操纵Excel的具体方法。 </P># A- G0 z$ c  H' s" D
<>  首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>
& @4 E5 E4 Y& n5 z7 x+ j& M<>  </P>
! W! |# e* t7 U  \<>然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>4 h" H! J, `! {% z) z; m
<>  </P>8 e$ B8 `# Y9 g/ u$ d( v
<>为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>
9 \8 p. U% h, u. I& k9 y<P>  </P>% z! k* i4 @  R# I# T7 F) m( V7 Q" q
<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
' G" e$ x: K/ D( E3 }' h<P>Button1Click()函数中加入如下代码: </P>* `3 `' H. U' M2 Z
<P>   Variant ex,newxls; </P>. N. A' {6 r. L: d- m, i$ W
<P>   int i,j=1; </P>4 H; {  h7 {% Z* N, C+ B1 W
<P>try </P>% H/ R% M  s7 K% ]% u1 k
<P>{ </P>
0 S0 v8 d+ _8 r6 _3 {<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>
" t! h/ S, }  \! s+ h<P>} </P>6 J: ]. K' U. U7 ~0 P
<P>catch(...) </P>
" N4 r( j1 ^3 o% P5 F5 X- \<P>{ </P>
7 i4 l2 [  `! i6 K3 n  D. O% j<P>ShowMessage(″无法启动Excel″); </P>
% S1 w; c' t8 L4 q: u<P>} </P>+ g7 a2 H# C+ q5 K8 K9 B* D3 m
<P>   ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>
6 n; x" o3 Y* R2 h. @<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>
4 n# L; h6 \, }3 N<P>  </P>
* d2 i6 M* I! r+ t5 T# k2 H' `. a<P>Table1-〉Active=true;   </P>- a7 i' _: A$ \/ ?1 P3 i) M- v* P1 @
<P>  //打开数据库 </P>
# o6 R0 n8 y% l; {  m: }# {4 i# O<P>Table1-〉First(); </P>
8 a* P8 x7 V+ K3 z$ Y/ m<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
/ G: ~0 g! J* g5 B$ ]<P>  //将字段名写到工作薄的第一行 </P>
# ], ?: |% e% ]! D6 E' q* [<P>{ </P>
! m0 l+ ~$ j/ e; @/ C0 n- F' X; J<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>1 A7 y3 A" s: a/ K, P3 V+ z
<P>  </P>
0 K2 d, N5 v9 p+ J; j<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>4 E* r7 Q5 M6 ]) p% X! |
<P>} </P>
- V* A. h+ Z, I. `<P>while(!Table1-〉Eof) </P>
! Y; ~' ?0 Z2 F" e+ l<P>  //将数据库中的记录依次写到工作薄中 </P>
& U1 J+ L; M1 F- c<P>{ </P>5 a, U; B' q( t# L4 o) ], t# E% v! F
<P>j=j+1; </P>
4 G0 y5 u0 Z6 j, L& o<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
( \, y9 n  F! Q2 P. N# g  w7 b# n3 e<P>{ </P>
, a5 \0 d. w. O; [<P>  (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>6 o8 r1 [2 `* q) I& h
<P>(i+1), </P>
  g" e: j$ }& ]0 G% y% I+ Q0 b7 C<P>  (Variant)Table1-〉Fields-〉AsString); </P>
9 S6 d) h  W/ {7 D<P>} </P>2 q+ f1 k& l: c+ o2 ^
<P>Table1-〉Next(); </P>
& s. X( X9 P* ~& ]6 S$ c<P>} </P>2 I; G  |) j4 S8 s
<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>
; G1 S9 u; X6 K; f<P>  //保存工作薄,filename是工作薄的全文件名 </P>
! P: r" f# s- G- G# d2 C<P>ex.OleFunction(″Quit″); </P>1 ^7 g5 O5 S. m# h* }& s6 l" D
<P>  //退出Excel,释放OLE对象 </P>
' ~- G2 F0 M' x2 S) }0 ?: h. y% C<P>  注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>
$ }7 j+ w6 V; A# N1 t<P>include ″ComObj.hpp″。 </P>
4 S4 o* i# Z  H2 e/ c7 M7 v$ I<P>  运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>2 h: T" O9 ^# c. D
<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>- N8 v! w5 a' m; k: h5 o* v
<P>  以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P>
作者: liunengwu    时间: 2010-4-8 14:07
体力 已经不充沛啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5