我用了以下语句,想修改Excel单元格中的字体,但都会在程序运行时报错:“找不到成员”,请各位高手帮忙解决。font.AttachDispatch(pRange);font.SetBold(COleVariant(double(TRUE))); //报错:“找不到成员”
font.SetSize(COleVariant((char)30));     //报错:“找不到成员”还有
range.AttachDispatch(pRange);
range.SetFont(COleVariant((short)50)); //报错:“找不到成员”至于改何种字体就更不敢试了。估计都是参数的设置错误。多谢。

解决方案 »

  1.   

    用ole view看看调用哪个excel的类型库就知道了,也可以看看vba的宏
      

  2.   

    在ole view中如何看调用哪个excel的类型库,开始我在class wizard中“import from type library调用的XL5CHS32.dll,可是无法看呀?另外VBA的宏在哪里,找不到。谢谢。
      

  3.   

    (在我开始学习时)我一般是这样使用的,先在Excel中选择录制macro,然后进行你需要的操作,接着你停止录制宏,保险一点保存宏后,你在Excel菜单中找到编辑宏的菜单,选择你才录制的宏,这时会自动调出VBScript编辑器,你就可以察看你所录制的宏,当然这还没有完,通常,你看明白了(可以在VBScript里用F2帮助)还必须转到VC中调用OLe的相应对象上,大多数情况他们之间不一样的,我反正就是不停的试,直到正确为止,这是一个很痛苦的过程,我开始一点资料都没有,也不懂VBA,还没有资料可是老板的任务不能不完成!如果你需要,我可以给你我写的两个操作Excel, Word的class.(不知让不让我带出来,我觉得没有什么技术含量,看你运气了)
      

  4.   

    谢谢ChaoZhang(Lynx),我也是初学,这方面也不太懂。也不懂什么是VBA,呵呵。你的excel和word的class,你要是能带出来就发给我吧,先谢了。.cn    你的方法我也好好试试。再次感谢。
      

  5.   

    如果你用的是OFFICEXP就不能用XL5CHS32.dll,应该用EXCEL.EXE,这个问题也曾困绕我几个钟头!
       to:ChaoZhang(Lynx) 
    希望你也给我发一份,[email protected]
      

  6.   

    高手们,希望能帮我看看这个问题http://expert.csdn.net/Expert/TopicView1.asp?id=1807807
      

  7.   

    vba的宏可以在excel里面录制宏,然后看一下生成代码就知道调用什么方法了。
      

  8.   

    ///////////////////////////////////////////////////////////////////////////////////////
    //change cell font of Excel
    ///////////////////////////////////////////////////////////////////////////////////////
    void CC2Dlg::OnOK()
    {//HOWTO: Create Automation Project Using MFC and a Type Library  Q178749
    //change font of a Cell in excel
    try
    {
    _Application app;     // app is an _Application object.
    _Workbook book;       // More object declarations.
    _Worksheet sheet;
    Workbooks books;
    Worksheets sheets;
    Range range;          // Used for Microsoft Excel 97 components.
    LPDISPATCH lpDisp;    // Often reused variable.
    COleVariant
    covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    if(!app.CreateDispatch("Excel.Application"))
    {
    AfxMessageBox("Couldn't CreateDispatch() for Excel");
    return;
    }
    app.SetVisible(TRUE);
    lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.
    ASSERT(lpDisp);
    books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer
    // to the books object.
    lpDisp = books.Open("C:\\temp\\book1.xls",     // Test.xls is a workbook.
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional, covOptional, covOptional );   // Return Workbook's IDispatch
    // pointer.
    book.AttachDispatch( lpDisp );
    lpDisp = book.GetSheets();
    ASSERT(lpDisp);
    sheets.AttachDispatch(lpDisp);
    // Get sheet #1 and attach the IDispatch pointer to your sheet
    // object.
    lpDisp = sheets.GetItem( COleVariant((short)(1)) );
    ASSERT(lpDisp);
    sheet.AttachDispatch(lpDisp);
    lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("b3"));
    range.AttachDispatch(lpDisp);
    range.SetNumberFormat(COleVariant("@"));
    range.SetItem(COleVariant((long)(1)),COleVariant((long)(1)),COleVariant(LPCTSTR("000666")));
    Font newfont;
    lpDisp=range.GetFont();
    newfont.AttachDispatch(lpDisp);
    newfont.SetName(COleVariant("宋体"));
    newfont.SetSize(COleVariant((long)24));
    newfont.ReleaseDispatch();
    // Release dispatch pointers.
    range.ReleaseDispatch();
    sheet.ReleaseDispatch();
    // This is not really necessary because
    // the default second parameter of AttachDispatch releases
    // when the current scope is lost. } // End of processing. catch(COleException *e)
    {
            char buf[1024];     // For the Try...Catch error message.
            sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);
            ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);
    }
    catch(COleDispatchException *e)
    {
            char buf[1024];     // For the Try...Catch error message.
            sprintf(buf,
    "COleDispatchException. SCODE: %08lx, Description: \"%s\".",
    (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));
            ::MessageBox(NULL, buf, "COleDispatchException",
    MB_SETFOREGROUND | MB_OK);
    }
    catch(...)
    {
            ::MessageBox(NULL, "General Exception caught.", "Catch-All",
    MB_SETFOREGROUND | MB_OK);
    }
    CDialog::OnOK();
    }