Visual C++ Excel编程小节

    最近研究了一下Excel编程相关内容,原因是帮团委校对数据,需要校对的数据是人工录入的可能会存在错误,比如学号或者姓名。正确的数据是从数据库导出的Excel文件。最后效果图如下:

clip_image002

读写Excel方式大致分为三种:

1.采用数据库方式连接,ODBC/ADO。

使用时必须安装xls的ODBC驱动,一般情况下都是随着Excel一起安装的。不过也有例外,如果你使用的是64位的系统,会发现xls的驱动没有,这是因为目前还没有xls的64位驱动,我使用的就是64位Windows,最后在虚拟机(XP)上完成的程序,顺带可以测试下。编写时发现,使用ADO方式,后台还是运行了Excel的进程,说明最根本还是第二种方法。

ADO编程模型(ADO2.5版本还加入了Stream对象,处理大数据;后来还有ADOX,扩展版本)

image

2.COM Automation,或者叫做互操作(C++ COM Interop),这就必须要了解Excel对象模型

excel

其中最常用的是Application/Workbook/WorkSheet/Range类,使用它们的属性和方法就能实现绝大多数操作。这方面的资料很多是VBA的,转换成C++代码时注意将COM数据类型转换成对应的数据类型(例如,使用_variant_t和_bstr_t类型来包装COM下的VARIANT结构和BSTR指针)。ADO和Excel对象模型都是COM组件,微软提供了智能指针模板例如_ConnectionPtr/_RecordsetPtr/_ApplicationPtr/,就可以避免使用COM时的引用计数和释放等复杂操作了。

3.直接分析xls格式,这是依赖性最低的一种方法不需要安装Excel或数据库驱动,适合与没有复杂数据与图表的Excel文件。CodeProject上有两篇文章,miniExcel和Basic_Excel就是这种方法。还有就是第三方的控件或者库,多半是商业版,例如华表的Excel读写控件,LibXL(功能强大)。

几点感触是:在Windows下面编程,肯定会和COM打交道,所以应当重视起来,还有就是MFC框架,虽然用的很熟悉,但是确实笨重了一点,很多时候明显感觉到坏代码的味道:较长的方法,重复的代码,资源文件应当与代码分离…,就算分离出来,可复用性也不高,看来还得努力提高提高,WTL/ATL是不错的选择。互操作还是很有前途的。C++/COM/.NET之间的交互令人兴奋。

 

几篇很不错的参考资料:

http://blog.csdn.net/bodybo/archive/2009/05/27/4220561.aspx

在VC中使用智能指针操作Excel

http://msdn.microsoft.com/zh-cn/library/wxks80sb.aspx

如何:以编程方式对工作表中的数据进行排序

http://support.microsoft.com/kb/257819/zh-cn#RetrieveExcel

如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据

http://conkeyn.javaeye.com.sixxs.org/blog/229992

VC++数据类型转换大全

http://www.cnblogs.com/sensizhe/archive/2009/04/01/1427362.html

VC 利用ADO操作Excel

还有就是CodeProject和CodeGuru中的几篇很好的文章就不列举了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值