转载自:http://blog.csdn.net/davidhsing/article/details/4231592
一、最常用的 OLE 自动化方式
这个方式应该说是功能最全的方式,可能也是应用的最多的方式。由于这种方式采用的是隐藏启动 Office Excel 的方式,所以几乎是全能,任何功能都可以完成。不过缺点也是比较明显的:
1、采用 OLE 方式,需要用户计算机上安装有 Office Excel,否则就失败;
2、由于是隐藏启动 Office Excel,而 Mcirosoft 的一贯作风就是功能强大、体积巨大无比,所以这个速度是个很大的瓶颈,如果是批量读取的话,那...
3、它的基本方法是使用导出 .h 进行 OLE 操作,但是网上关于 Excel OLE 的完善的参考资料并不是很多,大多也是抄来抄去,所以要想很好的使用它们,恐怕还要好好的探索一下。
不过总之,这种方式在文件数目不多,对功能要求大过速度的话,这是首选。
代码可参考:http://blog.csdn.net/hyz_9257/archive/2008/12/27/3621309.aspx
二、ADO/ODBC 的方式
这种方式需要确保 ODBC 中已安装有 Excel 表格文件的驱动 "MICROSOFT EXCEL DRIVER (*.XLS)",所以同样依赖于 Office Excel 是否安装。
常规例子:http://www.vckbase.com/document/viewdoc/?id=421
这里不得不提的是:新加坡人 Yap Chun Wei 在 CodeProject 上 2001 年发布的 CSpreadSheet,非常流行的一个 Excel 操作类。地址是:http://www.codeproject.com/KB/database/cspreadsheet.aspx
具体我在最后第六点来介绍和对比。
三、Sourceforge 上的开源 Excel 库
搜索了一下,有几个似乎人气比较高,像 libXLS,XLSlib 等,下载下来看了一下说明,好像更多是作为 php 的插件来使用的,对 C++ 似乎没多大帮助。
四、第三方收费 Excel 操作库
第三方收费的,找到一个 LibXL (注意不是 LibXLS),他的官方网站是 http://www.libxl.com/,首先尝试找了一下 cr,可惜没有,由于工期紧,我甚至都考虑要付费购买一份授权,$199 啊!在决定之前,还是先好好测试一下他的功能是否达到我的要求,于是编译了他的几个 Demo,居然... 他自己的 Edit Demo 居然连自己 Generate Demo 程序生成的 Excel 都打不开,俺机器可是安装的有 Office Excel 的呀!
五、一些不需要依赖 Office Excel 的方式
网上还有一些说的不依赖 Office Excel 的方式,比如
http://www.vckbase.com/document/viewdoc/?id=815,
但说实话,这里的只是理论可行,离实际运用还有很远的路需要走。
六、重点推荐的
BasicExcel !
他的作者和 CSpreadSheet 的作者是同一个,不过是因为他考虑到以前 CSpreadSheet 的一些局限性和想实现兼容性,重新写的。地址是:
http://www.codeproject.com/KB/office/BasicExcel.aspx
对比 CSpreadSheet,他的优点在于:
1、CSpreadSheet 采用 CStringArray 赋值和取值,所以对数字等都处理不是很合适;
2、CSpreadSheet 采用 ODBC 方式,ODBC 是拿来当数据库读取和赋值的,所以,必须依赖于 Office 是否安装;ODBC 的速度也是一大瓶颈;而 BasicExcel 直接解析 Excel 格式,从文件下手,速度有相当提高,并且不再依赖于 Office 是否安装;
3、CSpreadSheet 不支持对 Sheet 的操作,而 BasicExcel 可以;
4、CSpreadSheet 需要被读取的 Excel 每一列需要一个列头,比如“姓名”、“年龄”等,不是 Excel 自身的 A、B、AA 等,没办法,要作为 ODBC 数据源使用,需要相当于数据库表的列名一样,这是不可避免的;
众多优点,是 CSpreadSheet 不能比的,所以作者在 2006 年新发布了这个类。