QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

0

主题

3

听众

147

积分

升级  23.5%

该用户从未签到

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

使用道具 举报

3#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2025-12-21 12:32 , Processed in 1.175074 second(s), 63 queries .

回顶部