原创 在Labwindows/CVI中调用Excel的几种方法

2010-1-26 21:23 9770 4 6 分类: 测试测量
  最近需要实现在CVI中对Excel文件的读写,参考了几篇论文后,总结下基本上有3种方法:1.DDE(Dynamic Data Exchange);2.ADO(ActiveX Data Objects);3.Microsoft Excel xx.0 Object Library.
  DDE真是不知道那个角落里的东西,从传说中的Windows 3.x开始就有,直到最新版的Excel还支持这种方法。资料少的可怜,MSDN上有两篇关于用DDE调用Excel的文章。根据我的测试,这方法首先是用无论哪种方式打开Excel主程序,然后再对Excel进行连接,连接后通过通用的DDE函数进行数据传递。我写的程序没有成功,主要在连接的时候经常连接失败,最后在打开Excel程序后加了很多延迟,问题好了很多,但有时候还是莫名其妙的连接失败。在Excel的写入和读取上,尽管我已经把程序写的和一篇论文很像,但总是出现同一个错误,折腾了几下就放弃这种方法了。鉴于DDE是接近淘汰的技术,其连接也不可靠,所以不建议使用这种方法。
  Microsoft Excel xx.0 Object
Library貌似资料很多,但是鉴于CVI的用户数量,还是别指望太多,MSDN上有VB和C#的实例,如果我没记错的话.至于CVI中的库,真不知道是谁写的,哪都找不到帮助,MSDN上有完整的VB下的手册可以参考,如果装过完整版的Office的话好像会有个中文版的。用这东西真叫一个烦,大部分函数得看着VB下的手册猜着怎么用,步骤很繁琐。用它好处是,几乎可以实现Excel 的所有功能,操作顺序跟实际操作Excel有点像,缺点除了编程繁琐外,就是其版本严格的一一对应,Microsoft Excel 11.0 Object
Library对应的就是Excel 2003,版本高了、低了都不行,甚至有同版本不同Service Pack都不能兼容的情况。
  ADO+微软的Jet,可以实现把Excel映射成数据库,用SQL语言来操作Excel。这种方法我没研究深入,只是实现了Excel数据的读取和写入,还有很多问题要解决,但是它的操作方式我很喜欢。像大多数库一样,ADO你可以找到除CVI外很多语言的资料、示例。用ADO实现的好处是不必过多考虑Excel版本问题,好像Excel2007之前的都可以兼容,Excel2007好像是提供了一个新的库,具体没研究过。坏处就是,你得参照VBA的语句来完成SQL完成不了的工作,因为对VBA不熟悉,所以我才没深入研究下去。另外一点是,Jet貌似没用64位的版本,所以这种方法不能提供64位系统的兼容。
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1470618 2010-2-6 14:27

Labwindows cvi用的是标准C语言,这应该是最大的不同

用户377539 2010-2-5 22:43

Labwindows 和labview有啥不同啊?我学过一天的labview,为个串口通信做个上位机玩玩。
相关推荐阅读
用户1470618 2010-10-30 13:16
MPLAB C30 PIC24单片机的PLL
PIC24单片机的PLL功能很灵活,能很容易获得需要的频率。以下代码在PIC24HJ128GP510以及PIC24HJ128GP610下通过。C语言: 临时自用代码// 此代码假设要把6M外部晶振倍频...
用户1470618 2010-05-15 16:57
LabWindows/CVI开发小记
日前用LabWindows/CVI开发了一个小程序,记下经验,以备查阅。CVI的中文资料还非常少,我基本上都是翻看LabWindows/CVI的帮助文件。涉及到Win32 API的时候最权威的资料当然...
用户1470618 2010-05-11 20:20
MPLAB C18学习 SPI总线
     C语言: 临时自用代码     //SPI 初始化void SSPINIT(void){        TRISBbits.TRISB1 = 0;     TRISCbits.TRISC...
用户1470618 2010-05-11 20:16
MPLAB C18学习 串口及串口中断
     C语言: 临时自用代码     #include <p18cxxx.h>//RS-232初始化void UARTInit(void)                {     ...
用户1470618 2009-07-22 14:17
MPLAB C18学习 简单的AD中断程序
注意,本人新学C18,不能保证代码质量。代码基于PIC18Fxx20系列,和PIC18Fxx2系列在寄存器上有不小差异,不能通用,具体请参照数据手册。 #include <p18cxxx.h&g...
我要评论
2
4
关闭 站长推荐上一条 /3 下一条