我要实现的功能在vb里边时这样写的,
1.io_App.Workbooks(S_FileName).Sheets(S_SheetName).Range(sRange).Select
io_App.Workbooks(S_FileName).Sheets(S_SheetName).Pictures.Insert (sImageFile)2.io_App.Workbooks(S_FileName).Sheets(S_SheetName).Shapes.AddTextbox(1, x, y, length, width).Name = s_TextName 
io_App.Workbooks(S_FileName).Sheets(S_SheetName).DrawingObjects(s_TextName).ShapeRange.Fill.Visible = 0 
在vc中,用classWizard,把excel中的所带的excel9.olb中的所有class加载了进来,上边第一个所要实现的功能就是向excel中指定的cell中插入图片,但是如何在sheets类与Pictures类之间建立关系呢?  第二个就是在sheet中增加图形,然后重新设置这个图形的属性,但是如何在sheets类与DrawingObjects类之间建立关系呢?   
这两者之间的关系,我怎么也建立不起来,望高人指点!一定给分!!

解决方案 »

  1.   

    用 
    IDispatch* p=_WorksheetPtr->GroupObjects(L"Pictures")
    试试为什么不用 #import呢?
      

  2.   

    我试了一下,好像不行,我找不到 _WorksheetPtr 这个类啊, 我其实是刚学vc,许多还弄不明,怎么用#import??楼上的能说得明白一些,谢了!
      

  3.   

    这个问题是实现2个功能,第一个所要实现的功能就是向excel中指定的cell中插入图片;
    第二个就是在sheet中增加图形,然后重新设置这个图形的属性
      

  4.   

    #import 就是使用智能指针,用它可以代替使用classWizard-->From a Type Library
    用法是
    #import "C:\\Program Files\\Microsoft Office\\Office\\EXCEL9.OLB"_WorksheetPtr 相当于 _Worksheet*我看了一下,GroupObjects是隐藏的,你用classWizard-->From a Type Library可能看不到这个成员函数,
    [id(0x00000459), hidden, helpcontext(0x00010459)]
    HRESULT GroupObjects(
                    [in, optional] VARIANT Index, 
                    [in, lcid] long lcid, 
                    [out, retval] IDispatch** RHS);还有一个成员函数 OLEObjects
    [id(0x0000031f), helpcontext(0x0001031f)]
    HRESULT OLEObjects(
                    [in, optional] VARIANT Index, 
                    [in, lcid] long lcid, 
                    [out, retval] IDispatch** RHS);你都试试,看看用 "Pictures"做参数,那个能正常得回IDispatch接口
      

  5.   

    不懂,
    GroupObjects既然是隐藏的,那么我通过我的做法,能调用这个函数么?
      

  6.   

    开发基于com的自动化组件,不一定要用vc,既然有vb代码,直接开发一个基于vb的自动化组件岂不是更好。 使用atl开发,一般不选support mfc,减小组件的大小。你用class wizard引入类型库,则一定要选上support mfc,否则编译不过去。其实,可以用import "excel.olb"代替。 调用组件的属性,在vc的包裹类要用set/get方法,不能直接用xx.propertyName的方式。出差几日耽误了 
    你用sheets这种集合类得到的是IDispatch*,你要用DrawObjects对象attach. 
     
    sheets是个集合类,item()方法是它的默认方法。Sheets(S_SheetName)等于sheets.item(s_sheetName)。你用item()方法得到IDispatch*,再用DrawObjects.attach()就能用了。
      

  7.   

    不好意思,看见这里高手就来打搅一下了。怎样可以逐行调试用VC写的COM。一个很简单的问题,在线等待。
    http://expert.csdn.net/Expert/topic/2118/2118472.xml?temp=.2200434我用VC写了一个COM,再使用C#的一个应用程序来调用。
    现在要调试COM,怎样能够使程序在COM中中断停下来?
    我在COM中设置断点后,VC总是提示“当前不会命中断点,还没有为该文档加载任何符号”
    我该怎么办?
    是不是因为COM为二进制级别的代码共享,所以就不能在源代码级别调试了?WINDOWS 2000 SERVER
    VS.NET 2002