vResult = range.GetValue() 
改为
vResult = range.GetValue2()
试试?

解决方案 »

  1.   

    试了没这函数,函数没错,只是比以前多了参数了。
    你说的是SetValue,现在改叫SetValue2了,
      

  2.   

    我现在用的是EXCEL2003 + VS2003
    GetValue2() 或 get_Value2()是确实可用的,下面是代码片断 CApplication app;   
    CWorkbook workBook;   
    CWorkbooks workBooks;  
    CWorksheet workSheet;   
    CWorksheets workSheets;
    CRange range;
    CRange rge;
    CString szXlsFile = m_szAppPath + "\\tape_spec.xls";
    if(!app.CreateDispatch("Excel.Application"))
    {
    MessageBox("无法启动Excel服务器!");
    return;
    }
    COleVariant avar((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    app.put_Visible(FALSE);
    app.put_UserControl(FALSE);
    app.put_DisplayAlerts(FALSE); //不要报警啊
    workBooks.AttachDispatch(app.get_Workbooks());
    try
    {
    workBook.AttachDispatch(workBooks.Open(szXlsFile, avar, avar, avar, avar, avar, avar, avar, avar, avar, avar, avar, avar, avar, avar));
    workSheets.AttachDispatch(workBook.get_Worksheets());
    long count = workSheets.get_Count();
    CDlgSheetSel dlgSheetSel;
    dlgSheetSel.Create(IDD_SHEET_ITEM);
    long Index;
    dlgSheetSel.m_lpID = &Index;
    for(long i = 0; i < count; i++)
    {
    workSheet.AttachDispatch(workSheets.get_Item(COleVariant(i + 1)));
    dlgSheetSel.m_ListBox.InsertString(i, workSheet.get_Name());
    }
    dlgSheetSel.ShowWindow(SW_SHOW);
    if(dlgSheetSel.RunModalLoop() == IDOK)
    {//开始更新尺寸规格了
    workSheet.AttachDispatch(workSheets.get_Item(COleVariant(Index + 1)));
    range.AttachDispatch(workSheet.get_Cells()); 
    rge.AttachDispatch(range.get_Item(COleVariant(TAPE_SPEC_XLS_VER_ROW), COleVariant(TAPE_SPEC_XLS_VER_COL)).pdispVal, true);  
    CString str = rge.get_Value2().bstrVal;
    if(str.Find(TAPE_SPEC_XLS_VER) == 0xFFFFFFFF)
    {
    str.Format("当前sheet版本%s,\n需求版本%s。\n要继续读取吗?", str, TAPE_SPEC_XLS_VER);
    if(MessageBox(str, "文件版本错误:", MB_YESNO | MB_ICONQUESTION) == IDNO)
    {
    rge.ReleaseDispatch();
    goto ExitLine;
    }
    }
    rge.AttachDispatch(range.get_Item(COleVariant(SPEC_LSL_ROW), COleVariant(SPEC_LSL_COL)).pdispVal, true);  
    m_W_LSL = (float)rge.get_Value2().dblVal;
    rge.AttachDispatch(range.get_Item(COleVariant(SPEC_LSL_ROW + 1), COleVariant(SPEC_LSL_COL)).pdispVal, true);  
    m_D_LSL = (float)rge.get_Value2().dblVal;
      

  3.   

    我是excel2003 + vc6.0, 我现在还给用6.0呀,我希望有6.0的解决办法,不过还是非常感谢你给出具体代码,改成GetValue2() 会有一堆连接错误
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall _Application::Quit(void)" (?Quit@_Application@@QAEXXZ)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall _Workbook::SetSaved(int)" (?SetSaved@_Workbook@@QAEXH@Z)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct tagVARIANT __thiscall Range::GetValue2(void)" (?GetValue2@Range@@QAE?AUtagVARIANT@@XZ)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct IDispatch * __thiscall _Worksheet::GetRange(struct tagVARIANT const &,struct tagVARIANT const &)" (?GetRange@_Worksheet@@QAEPAUIDispatch@@ABUtagVARIANT@@0@Z)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct IDispatch * __thiscall Worksheets::GetItem(struct tagVARIANT const &)" (?GetItem@Worksheets@@QAEPAUIDispatch@@ABUtagVARIANT@@@Z)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct IDispatch * __thiscall _Workbook::GetSheets(void)" (?GetSheets@_Workbook@@QAEPAUIDispatch@@XZ)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct IDispatch * __thiscall Workbooks::Open(char const *,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARI
    ANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &,struct tagVARIANT const &)" (
    ?Open@Workbooks@@QAEPAUIDispatch@@PBDABUtagVARIANT@@1111111111111@Z)
    TestExcel01Dlg.obj : error LNK2001: unresolved external symbol "public: struct IDispatch * __thiscall _Application::GetWorkbooks(void)" (?GetWorkbooks@_Application@@QAEPAUIDispatch@@XZ)
    Debug/TestExcel01.exe : fatal error LNK1120: 8 unresolved externals
    执行 link.exe 时出错.TestExcel01.exe - 1 error(s), 0 warning(s)
      

  4.   

    vResult = range.GetValue()  
    改为
    vResult = range.GetValue2()
    试试?
      

  5.   

    我用VC6.0也试了下,编译使用都没问题啊。
    下面是excel.h中的声明部分,类向导生成的哦
    VC6的IDE很弱智的,向导是不是出了啥错误?另外EXCEL类型库是否为11.0版?
    你如果手工加入这个函数声明及实现能行不?//excel.h
    /////////////////////////////////////////////////////////////////////////////
    // Range wrapper classclass Range : public COleDispatchDriver
    {
    public:
    Range() {} // Calls COleDispatchDriver default constructor
    Range(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
    Range(const Range& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}// Attributes
    public:// Operations
    public:
    LPDISPATCH GetApplication();
    long GetCreator();
    LPDISPATCH GetParent();
    VARIANT Activate();
    VARIANT GetAddIndent();
            //......略
    VARIANT GetValue(const VARIANT& RangeValueDataType);
    void SetValue(const VARIANT& RangeValueDataType, const VARIANT& newValue);
    VARIANT GetValue2();  //这个函数是存在的
    void SetValue2(const VARIANT& newValue);
            //......略//excel.cpp
    VARIANT Range::GetValue2()
    {
    VARIANT result;
    InvokeHelper(0x56c, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
    return result;
    }
      

  6.   

    非常非常谢谢你,重做了一次问题解决了,用GetValue2(), 果然是VC6的IDE很弱智的,向导出了错误
      

  7.   

    多谢。看到这个贴子,居然解决了另外一个问题::设置setValue2的值。