最近需要给那该死的mapgis写个二次开发,需要将Excel中的数据生成mapgis图件,其中就有读批注的问题,但是,找了很久都找不到读取的方法,最后也就不找了,开始潜心研究VC自动生成的类库,终于明白了。
如果我想要加批注很简单,range.SetComment就可以了,可是读的函数就只有 range.GetComment,可它返回的是一个LPDISPATCH的接口,再往下就没下文了,翻了COM的书来看,接口就是一切,所以,给了我接口,就是给了我一座金山啊。我在用Delphi时,用Excel是由Text的属性来操作的,猜想,TEXT可能是Comment的一个属性,而有了接口,读这个属性应该是不难的吧,试写代码如下:
DISPID dispCommentText;
wchar_t *ucPtr = L"Text";
//取属性的接口号
lpDisp->GetIDsOfNames(IID_NULL, &ucPtr, 1, LOCALE_USER_DEFAULT, &dispCommentText);
//传入参数
DISPPARAMS dpRangeItem = {NULL, NULL, 0, 0};
//返回值
COleVariant vCommentText;
//调用COM的Invoke来取批注的值
HRESULT hr = lpDisp->Invoke(dispCommentText,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpRangeItem,
&vCommentText,
NULL, NULL);
CString ss=vCommentText.bstrVal;
真的,我读到了批注,为了这个批注,我折腾了两个多星期,没白天没黑夜的。
当然,我完成了我的工作就没再发掘comment的其它内容了,我想,包括字体,颜色,底色等,都可以如上方法去设置,有心情的兄弟去试试吧!
原创文章 ivu1399 2007-07-13