用VC++操作Excel文件

上周日中午,久未谋面的老蒋从长沙打来电话,要我帮忙做个检索Excel文件信息的程序。我看了下具体需求:根据关键字检索出包含这一关键字的所有行,很简单,我接下了这个活。
      周四晚上开始思考实现方案:
                   1 VC++ 调用Excel自带库函数
                   2 VC++或 python  操作xml文档

      应该说第一种实现方案更好,因为老蒋发过来的数据本身以Excel文件格式保存,另外Excel表格数据对用户来说更容易操作,还有一点很重要,室友谭强用VC++实现过操作Excel文件的功能,他可以做技术支持。
      首先是上网找找操作Excel文件的开源代码,在国内找的几个类似的代码要么功能不符,要么没示例代码,难以模仿应用。那只好上codeproject看看,这次codeproject没让我失望,找到了新加坡人写的CSpreadSheet类,描述如下:
     // Class to read and write to Excel and text delimited spreadsheet
    //
    // Created by Yap Chun Wei
    // December 2001  

虽然是01年写的代码但能操作Excel2003格式的文件,因为其实现原理就是利用ODBC来操作Excel文件。 codeproject网站做得最好的是其提供的源码一般都带示例代码(这也是国内开源网站的差距所在)。我照着demo代码依葫芦画瓢,很快便实现从Excel文件读取数据的功能。
     接下来设计数据结构,实现检索功能。开始选的存储数据的容器是CStringArray,实现过程中发现其不支持赋值操作(operator=),那就改用我熟悉的STL容器,直接把vector<CString>塞进一个vector,里层的vector保存一行的信息,外层保存每一列的信息,数据结构声明如下:
class CGrep  
{
   
    CStringArray    testRow, Rows, Column;
    vector< vector<CString> > sampleArray; // 保存Excel表格中的数据
} ;                                             
    在上面的类中再加两个函数:
       bool readxsl(const CString& filename,const CString& sheetname); // 提取Excel数据
       void CGrep::grep(const CString& word,vector< vector<CString> >& rstArray); // 根据关键字检索sampleArray中存储的数据,这里要感谢东风教我用CString的Find和GetLength函数。

      CGgrep类实现完了,只剩界面了。这个好办,刚好谭强有空,经他指点,从他的代码提取了几段操作ListCtrl的代码,改改参数就搞定了!
      现在程序已经发给老蒋,他似乎用着感觉还不错,呵呵,我的感觉更好了,不是从小就被教导要学以致用嘛:)
     在此感谢谭老师的技术指导,虽然我去年教过你一点VC++的知识,但现在你 的VC++水平超过我了,不愧为人民教师。 同时也感谢东风的指点。 最要感谢的还是CodeProject开源代码网站,它从来没让我失望过。 开源就是力量!

后记:
        这周五(12/26/08),老蒋又打来电话,说我这个小程序有人出价五百,但老蒋想把软件做成授权发行的方式,这样发一份能收个几百。 说实话,我当时写个程序只是想练练手,能赚钱的确没想到,因为在我看来这个程序技术含量太低。看来我还只是个书呆子。
        开源是个好东西,这个程序就是基于开源代码实现,所以我最初的想法把我的代码也开源,但老蒋发掘 了程序的经济价值后,不但不开源,还要做成和机器绑定的发行版,这与我的初衷相差太远。要想做到既开源又赚钱,那得保证客户在得到源代码后遵守协议(不扩散拷贝),这个方案几乎没有现实可行性。另一方面,不支持拷贝的协议按RMS的说法肯定是不自由的。总之,自由开源软件的思想在现实(尤其在中国)还缺乏可操作性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值