VS2008下用C++ OLE技术高效处理Excel数据-总结

一、环境的部署和编程遇到问题的解决
1.建立界面最好用copy控件的方式,使得界面美观更快捷。Add classes微软的库,COM技术。#import将一些dll,exe导入,去掉一些不必要的信息。
2.工程或类或变量的命名违法问题,例如 对于2G基础全网,l例如:
   声明:typedef struct 2GBasicRecord{
         ...
          }
     为什么报错,是因为变量名前面不能用数字开始。

3.不是代码导致的问题,就是工程配置环境导致的问题。我的CString报错,AfxMessageBox报错,因为配置环境的general的字符编码改为multiple bytes格式后就可以了。

4.打开对话框,指定路径下生成.xls文件用OLE尝试无法解决,改用ODBC来指定filepath创建文件。但ODBC插入Excel表是会导致'号,其实用range对象来设置Excel单元格格式也是可以将插入的数字转化为文本的。

5.声明一个app workboos,m_workbook ,多个workbook之间切换赋值给m_workbook实现对不同的Excel表的操作。

6.由加载的知道Excel的列数,自己写了个转换函数来知道列名。

7.业务中的原始表格有大小写类型的关键字,用CString的CompareNoCase解决匹配问题。
8.不同的结构体set之间的关键字比较,可以用:
 ARecord a;BRecord b;
a.keyWord=b.keyWord;

set<ARecord>::iterator aIt=m_aRecord.Find(a);//可以再a中查找到对应的b是否存在。

9.CListBox滚动条的智能化,要添加一段代码才能解决。

10.存在的单个读取Excel单元格和n!求集合的交集导致效率极低?

二、更高效的读取Excel数据技术解决方案
  用二维数组导入到内存中,结构体set边加载边分别求交集。
因采用哈希表的形式也要遍历基础上插入,哈希表也不易于实现。故采用set集合的形式放到内

存中,set集合相互间的Find,只要给结构体的一个比较关键字的成员赋值即可。
优化的措施:
  1.set集合边加载边求交集。
  2.求完交集丢掉数据,以降低内存消耗。//欠缺
  3.语句中的优化,多使用if else if else if,但是有些逻辑还是用if if 好处理。
  4.字符集编码的转换,Unicode,导致界面不美观,声明的Excel表用VT_VARIANT,然后其它字符可以直接转换为_variant_(str);_variant_(num);提高效率。货币形式的字符自动省略的问题,因为Excel自动匹配,用get_Range,然后ran.put_NumberFormatLocal(_variant_t("@"));
  5.用二维数组读取,OleSaveArray的形式来处理,可以批量的读取和批量的写入,这样的速度更快。

备注:
不应该出现的问题:
  1.线程的控制,在写入Excel表时用了多线程,但是一个进程中用线程级别去连接Excel进程是不合理的,导致不成功。
  2.处理打开的文件是在同一路经删除,不同路径下添加后缀的逻辑,不应该用if else if而是用if if形式。犯了个愚蠢的小逻辑错误。
  3.进度条的控制,控制变量跨文件,用extenal不成功,可以用app的方式,外部结构体的方式。调节进度条时调试到了值,就不应该整个代码的架构。已花掉了一个晚上的时间,而且没有备份,幸好有一个最新版本,记得大整改时一定要备份。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值