QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 57631|回复: 1
打印 上一主题 下一主题

c++builder如何和excel交换数据?

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 01:22 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>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
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
liunengwu 实名认证       

0

主题

3

听众

147

积分

升级  23.5%

该用户从未签到

自我介绍
我是一个数模爱好者,希望在数模中获奖!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-14 05:12 , Processed in 0.390596 second(s), 56 queries .

回顶部