注册 登录
Office中国论坛/Access中国论坛 返回首页

ganlinlao的个人空间 http://www.office-cn.net/?230471 [收藏] [复制] [分享] [RSS]

日志

Freebasic后期绑定调用excel,word,powerpoint等ole automation软件

已有 3379 次阅读2017-5-4 18:18 |个人分类:FreeBasic| Freebasic教程, Freebasic, Freebasic, Freebasic, Freebasic

       在IE死掉以后,ms-office是目前微软尚存的ole automation软件,其它的coreal draw和auto cad都纷纷转向。
不管是前期还是后期绑定ole automation,都只能通过idispatch接口,而idispatch只有两种数据类型,一种是hResult(用来处理错误),另一种是variant。所以不管vba有多少数据类型,它调用office对象,只有一种数据类型,那就是variant。
除了vb(vba),不管是c++,c#……都无法做到完全自动转换variant中的类型,FB也不例化,variant绝对是一个很让人头疼的数据类型。
          idispatch接口,最常用的就是getidofNames和invoke方法。其中为了方便使用,一般把invoke方法进行细分,get方法用来获取属性值和子对象,put方法用来设置属性值,set用于byref方式设置属性值(所以vba中使用set语句用来赋值object对象,呵呵),call方法用来调用对象的方法。
          FB中处理com和ole的库不少,有的很强大,有的比较简单,有的强调调用,有的强调不仅调用还强调能写activeX的dll和ocx。但都或多或少有点瑕疵,因为个人的喜好不同,写出来的风格不太一样。
          在这里,我就介绍其中的一种,这是vbrichclient作者为FB写的一个简单的vbvariant类库。
         写一个简单的例子:
          '==================================
          #include "simpleVariant.bi"
          dim excelapp as vbVariant
          excelapp=createobject("excel.application")
         excelapp.put("visible","b","true")
          excelApp.Get("workbooks").call("open","s","G:\Freebasic\FBtest\test.xls")
          print "调用成功"
          sleep
        '===================================
        

     

vbvariant类,有一个很遗憾的地方,就是它干脆不自动处理variant的数据类型,所以每一个参数值,都要指明数据类型(b:表示boolean;s:表示string(ansii);w:表示wstring(unicode);c:表示currency;i:表示integer;I:表示long;f:表示single;D:表示double,t:表示datetime,v:表示variant)。
      这让人很不爽,当然这是有改进的空间的。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:46 , Processed in 0.066116 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部