数学建模社区-数学中国

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

作者: 韩冰    时间: 2005-1-26 01:22
标题: c++builder如何和excel交换数据?
<>c++builder如何和excel交换数据?</P>
3 C- r& P( e: u, {  F<>  </P>
* z/ a! W3 O$ q<>这是从网上下载的: </P>
* J: r5 n- d7 t' s) r0 T<>Microsoft Excel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数 </P>
7 s3 e6 U+ b) D, {<>  </P>8 J8 k+ Q8 Z7 q  j3 `  e
<>据库应用软件开发过程中,如果能实现数据库与Excel文件的数据交换,那么一方面能增 </P>
6 V( f& d9 N" ~- I8 \<>  </P>
+ `" V1 y8 i& q0 C- v  x2 |" K<>加数据库数据的来源,另一方面也能方便用户对数据库数据的进一步处理。 </P>5 [. J9 D8 P# T$ I
<>  C++ Builder是一个可视化快速应用程序开发工具,它提供的OLE Automation机制 </P>
" I0 h* ]8 r6 s! p5 C4 E+ B<>  </P>
" f+ }4 n# K# n% \/ e  Q1 t+ y<>使得开发人员在应用程序中就能调用Excel,实现数据交换。 </P>8 X5 p/ X# c+ L' ^. y9 V
<>  在C++ Builder中调用Excel,首先要为Excel建立一个OLE对象,然后通过设定该 </P>
! [; ^* u0 ^5 _7 N9 C5 a<>  </P>3 c5 v4 }( W9 n# W! I
<>对象的属性和调用该对象的方法来操纵Excel。C++ Builder通过CreateOleObject()来 </P>
" f: K: N3 U5 N: q/ l+ b1 `- e4 J<>  </P>5 M9 J% u( x: w! V! A
<>建立OLE对象;用OlePropertySet(propname,value)来设置OLE对象的属性;用 </P>! k1 b& j# W, L! L: t, _! D7 M' q# {
<>OlePropertyGet(propname)获得OLE对象的属性;通过OleFunction(oleFuncName, </P>
: R' d! ~$ K! ?, g2 F3 z<>[val,...])和OleProcedure(oleProcName,[val,...])来调用OLE对象的方法。 </P>
  f* ~, J6 r  c/ u7 y' O/ c$ L' {<>  C++ Builder中使用OLE自动化操纵Excel,必须掌握Excel的自动化对象及VBA关于 </P>
" F& k( I8 h5 D9 }( P<>  </P>, J) ^7 G, H1 ^; W! _$ S$ c
<>Excel的对象方法和属性,这些都在Microsoft Office(完全安装)的VBAXL8.HLP帮助文件 </P>
, h( H& m, q  y5 e* @; V- u1 k" j<>  </P>3 v& X1 s/ f( e7 x5 v
<>中可以找到,在此就不再赘述。下面以将数据库中的数据转到Excel工作薄中为例,说明 </P>
# x! ]0 @, k2 `7 U, f2 Z. S* [% h<>  </P>
$ G; b* L. G6 m5 N<>C++ Builder操纵Excel的具体方法。 </P>( |; g) Q$ T; q9 N
<>  首先新建一个表单Form1,保存单元文件Unit1.cpp,保存工程文件Project1.bpr。 </P>2 ^# c4 j/ f9 o$ ^9 j; ]
<>  </P>7 k1 I! a/ T0 T% u: }) `7 H: d8 z: H
<>然后在表单中加入数据访问控件TTable,将Name属性设为Table1,DatabaseName属性设 </P>
1 m# m& a4 l4 @; B9 ?<>  </P>
; B' A0 F" o' k3 P- Q<>为BCDEMOS,TableName属性设为Country.db。在表单中加入一个按钮控件TButton,将其 </P>
' [$ F" |) |; w2 J% v7 X9 c, s& C<P>  </P>
% h7 e- ?2 [- G0 {/ _0 s3 Q1 \8 c<P>Name属性设为Button1,Caption属性设为 “转换为Excel文件”。双击Button1,在 </P>
! W% V* V# X6 u0 M- x" J<P>Button1Click()函数中加入如下代码: </P>- f3 h: p: A: q, ~0 z
<P>   Variant ex,newxls; </P>
; X3 u7 X, r6 Z! P, [5 x- K2 V+ c<P>   int i,j=1; </P>& h$ a. I# R( j. j6 {, w: R: h4 Z
<P>try </P>
" [% C) w! Y2 ?  y<P>{ </P>
1 {* m) B7 u( w3 Z" ^  k; [& x. c1 S$ i<P>ex=CreateOleObject(″Excel.Application″); //启动Excel </P>  Z) w  {" |% f! n: u
<P>} </P>
. @; O; O9 P2 ~' x; C' Y1 V) E<P>catch(...) </P>
- h& B7 b4 g! N9 Q5 q5 _<P>{ </P>' |1 N( F& p. e, |' l+ B% @
<P>ShowMessage(″无法启动Excel″); </P>
1 c) G! d- d% W$ _0 L; p<P>} </P>
+ z" g) I; y( J$ ~3 V8 h  O<P>   ex.OlePropertySet(″Visible″,(Variant)true); //使Excel启动后可见 </P>
1 w, H& C. W( a* V; F6 \7 b$ W<P>newxls=(ex.OleFunction(″Workbooks″)).OleFunction(″Add″);//新建一个工作薄 </P>7 V: M5 a0 i+ j: {
<P>  </P>" ]4 p3 q& F2 A5 q
<P>Table1-〉Active=true;   </P>
7 h/ v+ D% ]- n7 j# s7 k<P>  //打开数据库 </P>
5 w% h3 \6 h& J, [) z$ O8 _<P>Table1-〉First(); </P>
: d1 Z+ }3 b; V; _$ m4 P! }<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
9 m* `" d4 V2 k# U! c, W<P>  //将字段名写到工作薄的第一行 </P>- L* m  U% Q. g6 |% G6 b/ U9 o
<P>{ </P>: D& c* W2 S$ M1 N" j/ S
<P>(ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)1,(Variant)(i+ </P>- K# e5 Z9 L# v3 m; {5 O
<P>  </P>; u0 O+ F5 h5 x0 z3 N+ d* S' z2 I; \
<P>1),(Variant)Table1-〉Fields-〉FieldName); </P>
7 D( m" v  Y$ B( n. ?! H4 j<P>} </P>
5 ^3 T) U! _0 t<P>while(!Table1-〉Eof) </P>; a1 j# g+ U0 A: N$ |
<P>  //将数据库中的记录依次写到工作薄中 </P>& }$ u/ q/ n3 L4 }
<P>{ </P>% K7 G: s6 @7 \$ ~% Q) c) n
<P>j=j+1; </P>" A- A% c2 J1 K1 ?1 d  D
<P>for(i=0;i〈Table1-〉FieldCount;i++) </P>
) j9 }" Z, i. Z. _* w<P>{ </P>+ ]* c! O, @# {) T
<P>  (ex.OleFunction(″Cells″)).OlePropertySet(″Item″,(Variant)j,(Variant) </P>) A+ A4 `) c( T. y+ n) [
<P>(i+1), </P>
3 t& }0 o' g$ Q. U<P>  (Variant)Table1-〉Fields-〉AsString); </P>' u, K  _( z& n& T6 x0 n
<P>} </P>- U7 }# A/ H1 s! g. [
<P>Table1-〉Next(); </P>/ D* R. C. r/ x4 x
<P>} </P>9 I& h. s1 W! P4 c7 t: f
<P>newxls.OleFunction(″SaveAs″,(Variant)filename); </P>. `% a8 g8 x0 E" z
<P>  //保存工作薄,filename是工作薄的全文件名 </P>) J. A/ R5 k1 v- _+ c8 S) o2 _
<P>ex.OleFunction(″Quit″); </P>
/ I: U  J6 |: A9 X' ]<P>  //退出Excel,释放OLE对象 </P>+ [/ F- w: z7 L- Y, ~
<P>  注意,要使用OLE自动化对象,在编译之前还必须在Unit1.cpp文件前面加上# </P>
/ v; }& f1 ^9 j' G, f& I<P>include ″ComObj.hpp″。 </P>
4 A$ B. ~+ L% _& Y0 P<P>  运行程序就可以实现将数据库中的数据转换到Excel工作薄中。同样的道理,使用 </P>  p- O( O) T( ?& f
<P>OlePropertyGet()函数,也可以将Excel工作薄中的数据读到数据库中去。 </P>
  `* C! O8 A! @5 n5 q, I<P>  以上代码在Windows 98操作系统、C++ Builder 3.0下调试运行通过。 </P>
作者: liunengwu    时间: 2010-4-8 14:07
体力 已经不充沛啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!




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