数学建模社区-数学中国

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

作者: 韩冰    时间: 2005-1-26 01:22
标题: c++builder如何和excel交换数据?
<>c++builder如何和excel交换数据?</P>/ c7 w# l6 u5 u7 q
<>  </P>
0 s9 {) g4 m' B<>这是从网上下载的: </P>
. C' e0 U+ ~$ O# M7 S<>Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>
7 O  _# J1 z; [6 ~3 |- `  z# Y<>  </P>
; Q% W' E) b& i7 E! R<>据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>/ A6 W5 [7 N  {
<>  </P>
9 K9 `" }& T+ b  S<>加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>% S* u  i! z3 @! }4 w" m
<>  C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>! I  {# e- o& r$ ~
<>  </P>
6 F$ R% l4 `. H' i<>使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>
- l, k  U: F4 v( ?5 v( J% p( x<>  在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>: R8 c2 O" N$ ^, q* C9 e
<>  </P>
9 V0 {3 g6 |5 Y- ~4 J+ ]<>对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>
1 i5 y* \+ [1 B8 s1 x: f2 K4 d<>  </P>
  {0 P# V; d! d! B/ h7 K<>建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>
2 e3 a, \2 @$ q* `<>OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>
3 P; \# r( y2 \7 T, y1 F" z<>[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>
4 e( F! i" ~4 G<>  C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>
7 z4 a3 o' S5 l$ f  L<>  </P>
2 t( v: j3 u! `3 G% p<>Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>
" r7 v: X4 L. M% V5 u: J( c<>  </P>9 G/ A1 k- i7 s% X4 G
<>中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>1 c# h( v' Y0 \( n
<>  </P>- T+ D. Y; I7 O1 v5 [0 ~, f
<>C++ Builder操纵Excel的具体方法。 </P>9 k* n/ }2 Q0 Q
<>  首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>, q2 f; n/ u* t% U3 U) ]
<>  </P>: t! T. \' X6 ?
<>然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>
( ~$ ^( T0 d' T: P: p<>  </P>
* D2 z! [# @# e4 p  x<>为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>
8 @5 ^0 p8 J2 L$ ]) O<P>  </P>
$ Q8 l. \8 L/ i- N! p0 ^4 I* ?<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
, |. O  o. b7 ~/ E& i) u<P>Button1Click()函数中加入如下代码: </P>2 ~+ R" C$ s. x! P( X3 I, J
<P>   Variant ex,newxls; </P>" {- n7 y/ Q5 I4 m0 k
<P>   int i,j=1; </P>
# l/ E, V: Y: t7 W5 {2 [: s# s<P>try </P>
4 Q- p( f. E$ E+ d: {" h<P>{ </P>
8 b; c0 s7 S* Z1 X9 X$ ?- r2 F<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>
7 y% P- S  U5 }4 B0 t<P>} </P>; A7 Q$ O9 T$ J* I; s- \% x( f
<P>catch(...) </P>% k' F  |5 T. o- L; D+ d' T1 f
<P>{ </P>0 K, ]3 {" E3 z3 Q2 i+ h. g) S& G
<P>ShowMessage(″无法启动Excel″); </P>: Y3 h' C. k1 w: O! _
<P>} </P>
0 O& C0 M) j$ V9 k$ F- q<P>   ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>
6 f7 @' u% ]1 F7 J* V4 j4 d8 P<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>
! k. K, u8 [! g% J! H/ }: }<P>  </P>
; D+ S" Y4 N: D7 J. F<P>Table1-〉Active=true;   </P>
2 {" q5 {( z- W- `! h5 E<P>  //打开数据库 </P>
% J) R& X: e8 q( R: c2 \* `3 J. P3 o<P>Table1-〉First(); </P>2 H7 q; J- u! u1 k% \  a* j; X% ^- Q
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
8 p( F* G% J9 {" Z2 ]<P>  //将字段名写到工作薄的第一行 </P>9 q0 t/ Y% g& w4 c! C
<P>{ </P>+ K- G, S9 J* v9 d5 o
<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>
5 m! _# P# f* `% j. ]% i7 ~<P>  </P>
1 P( g3 T0 J: l) N<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>8 g3 m/ q7 n! a2 g8 p& }2 `: v
<P>} </P>
5 t5 a2 q0 t. l! u( z' k; x<P>while(!Table1-〉Eof) </P>
9 c: j. F' K5 U/ q+ \6 `<P>  //将数据库中的记录依次写到工作薄中 </P>) s# I% Y* ~% t  x4 g
<P>{ </P>
, _. s9 S; s9 J8 F- n" i5 k<P>j=j+1; </P>* y) A' g; G9 O( z& U# {
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>* q* C, |% }: f
<P>{ </P>- \# g- W& n# e& @" H" v
<P>  (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>/ e8 n# A$ R2 L- b
<P>(i+1), </P># ~5 y7 O1 h) i: H
<P>  (Variant)Table1-〉Fields-〉AsString); </P>
, u" ^# ^) q6 m  }/ T# B3 k" T<P>} </P>' }' P: M/ N( z7 [( [
<P>Table1-〉Next(); </P>
$ t" `, \, K8 g- Y) [, M5 C<P>} </P>1 K; r) L( F* E4 E
<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>% o, j  X  C5 t6 }2 I
<P>  //保存工作薄,filename是工作薄的全文件名 </P>4 Y3 [7 \4 O, z
<P>ex.OleFunction(″Quit″); </P>& [' J' }: `( _$ t" M
<P>  //退出Excel,释放OLE对象 </P>
' H, u8 {& H! W+ Z3 P. U<P>  注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>
4 I1 {2 N7 l# S4 J3 F<P>include ″ComObj.hpp″。 </P>; {6 D9 V# {# w) B7 ]
<P>  运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>
  {% f. S3 l7 h1 Z7 t<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>+ {' f5 x1 C, h, X
<P>  以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P>
作者: liunengwu    时间: 2010-4-8 14:07
体力 已经不充沛啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!




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