Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368140
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:38:54

在COM接口中,时常用到Variant,BSTR,SafeArray数据类型。Variant数据类型是一个联合,可表示几乎所有的类型的数据,具体用法见MSDN中的相关介绍,类_variant_t是对VARIANT数据类型的封装。在Excel 2000的VB编程帮助中,如果提到某函数或属性需要一个值,该值的数据类型通常是Variant,在封装Excel 2000对象的类定义中,说明了具体需要的数据类型。BSTR是一个包括了字符串和字符串长度的数据结构,类_bstr_t是对BSTR数据类型的封装。在Excel 2000的VB编程帮助中提到的字符串通常指BSTR。具体函数参数或属性的数据类型,见封装该对象的类的定义。SafeArray是一个包括数组和数组边界的结构,数组边界外的内容不允许访问。在Excel 2000的VB编程帮助中提到的数组是指SafeArray。关于SafeArray的处理,请见MSDN的相关帮助。
--------------------next---------------------

当我运行rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);这一句的时候老是弹出存取冲突,这是怎么回事呢?我用的是空文档另存的xlt文件.多谢了.
chxd666@tom.com ( smile2life 发表于 2007-4-17 22:06:00)
 
对ExcelApp要执行ReleaseDispatch(),所有的对象都要执行ReleaseDispatch(),否则无法完全释放该对象。。两个 Excel Application对象都需要执行ReleaseDispatch()方法。 ( 辛苦 发表于 2005-3-28 1:03:00)
 
关闭Excel的方法, .quit虽能关闭和EXCEL程序,但在进程中还有。除非退出调用EXCEL的应用程序。
( sunboy2 发表于 2004-12-4 13:07:00)
 
关闭excel进程的方法:可以在ExcelApp.ReleaseDispatch()之前加一个ExcelApp.Quit()就可以了。 ( roversun 发表于 2004-9-23 10:34:00)
 
不错,不错!有启发! ( xuu 发表于 2004-6-24 11:07:00)
 
to sprking:
从cell中读取字符串后将其转换为CString或int的方法:
1.字符串:BSTR是unicode编码,要正常显示,有三种方法:
A-调用unicode函数如MessageBoxW,例
_variant_t vStr;
BSTR    bStr;
vStr=rgMyRge.GetItem(_variant_t((long)),_variant_t((long)1));
bStr=vStr.bstrVal;
MessageBoxW(this->GetSafeHwnd(), sss, NULL, 0);;
B-利用WideCharToMultiByte函数将其转换为相应的字符串,简体中文的codepage是CP936;
char szbuf[1024];
_variant_t vStr;
BSTR    bStr;
vStr=rgMyRge.GetItem(_variant_t((long)),_variant_t((long)1));
bStr=vStr.bstrVal;
memset(szbuf, 0, 1024);
WideCharToMultiByte(CP_ACP, 0, bStr, _bstr_t(bStr).length(), szbuf, 1023, NULL, NULL);
C-取得bStr时,利用_bstr_t类型转换一下即可
_variant_t vStr;
BSTR    bStr;
vStr=rgMyRge.GetItem(_variant_t((long)),_variant_t((long)1));
bStr = (_bstr_t)vStr;
2.int型:_variant_t类重载了类型转换,如short、long等,直接转换就是了
_variant_t vStr;
vStr=rgMyRge.GetItem(_variant_t((long)),_variant_t((long)1));
short stmp = (short)vStr; ( wsxwang 发表于 2004-6-20 21:09:00)
 
这篇文章挺有启发的
谢谢作者了~~~~~

但是在开发中,遇到二个问题,希望同道人商讨解决
开发的程序功能就是 将csv转换成xls
用二个_application 分别对于csv 和xls 
还有二个问题没有解决:
1)转换的速度有的慢(在csv列和行多的情况特严重)
2)没有关闭所有的excel进程,留有一进程(在程序中生成二个excel进程)~~

希望大家讨论 ( snap2008cn 发表于 2004-4-22 18:25:00)
 
看了程蓬的这篇大作给我的帮助很大,按你介绍程序能很好的运行,也能实现在Excel空文件里写入字符串,但是有一点没明白,就是怎样从Excel的cell里读出字符串并转换成CString 或者int格式的? 
   我使用了这样的语句:
CString str;
variant_t vStr;
BSTR    bStr;
vStr=rgMyRge.GetItem(_variant_t((long)),_variant_t((long)1));
bStr=vStr.bstrVal;

但最终还是没想到办法吧它转换成CString格式的。急切盼望 程蓬 及各位大侠指点迷津,谢谢先!! ( sprking 发表于 2004-4-12 12:51:00)
 
我是刚刚注册vckbase的新手,在这里看到几个问题也是我曾经遇到过并头痛的,想给大家一点参考见:
1)re 第一条 海帆 :mytemplate.xlt 是EXCEL 模板,可以这样很简单的创建:1。打开一个空的Excel文档并新建一个空表;2。选择菜单 文件->另存为 ;3。在”另存为“对话框中”默认的扩展名是".xls",你应该重新选择,在 "保存类型"的下拉框中选择" 模板(.xlt)"这一项,保存后的文件便是xlt模板了;

2)re "bj02:我是在win98下调用,": 程蓬的大作讲的是office2000 Excel的操作实现,头文件是 Excel9.h,估计你得修改头文件。

3)re “guchen:是的,我也很想知道,不利用模板,直接新建Excel文件的方法”: 其实 程蓬 的大作中的这条语句 wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt"))); 改成
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xls")));  后一样可以运行,当然你应该在相应的文件夹底下建一个Excel文件而不是Excel模板。但我不知道这样改之后会不会对程序产生负面影响。还请大侠们指点。

( sprking 发表于 2004-4-12 12:45:00)
 
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("D:\\jiazp\\DoExcel\\MyTemplate.xlt")));请问mytemplate.xlt是个什么文件呀.哪弄这个文件去?菜鸟弱弱的问一下. ( 海帆 发表于 2003-11-27 16:15:00)
 
.......................................................

--------------------next---------------------

阅读(389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~