我想要把vc++ 跟excel 连接, 调用 excel 的 ln()函数. 但是运行的结果竟然是 -9.25596313493178e+061 还有 , 我想用 max(x,y)函数, 但是系统提示 参数类型不对, 请个位高手指教. 我知道 vc自己也有这些函数. 我只是想有个例子. 主要还是想调用 excel 的 统计函数还有 求逆矩阵的函数 . Application ExcelApp; 
Workbooks wbsMyBooks; 
_Workbook wbMyBook; 
Worksheets wssMysheets; 
_Worksheet wsMysheet; 
Range rgMyRge; 
WorksheetFunction fun; //创建Excel 2000服务器(启动Excel) if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 

AfxMessageBox("创建Excel服务失败!"); 
exit(1); 
}   
UpdateData(true);   m_edit = fun.Ln(10);   
  UpdateData(false); 

解决方案 »

  1.   

    网上搜一下 "VC excel 编程"
    先要明确一点,用接口之前要先关联起来
      

  2.   

    如果没有初始化COM,创建Excel服务程序就会失败的。
    是因为你没有获得WorksheetFunction的接口指针。你按照下面的方法试一下:
    WorksheetFunction oFun;
    oFun.AttachDispatch( m_oExcelApp.GetWorksheetFunction(), TRUE );
    CString strMsg;
    strMsg.Format( _T( "%f" ), oFun.Ln( 9 ) );
    AfxMessageBox( strMsg );我已经试过了,值是2.197225
      

  3.   

    大哥真神人也!!!! 小弟成功了!!! 不过您的电脑编译器好像有点问题. ln(10) 的值是2.3026, 跟你的结果差距好大. 不过这个不是问题拉. 接着请教一个问题, 我要计算方差函数 var(), 这个问题好大,老是提示参数类型不对, 还有,它似乎只能计算30个数的方差,假如我的数组里有3000个值怎么办, 请大哥给个例子, 最好样本超过30个数,这样我连接excel 函数库才有意义啊. 谢谢了. 100分如果不够,我再加,不过我只剩下150分了,不过以后可以补.
      

  4.   

    首先我看了Var这个求方差的函数。
    在Excel中使用我发现,这个函数的确只能有30个参数。
    但是这三十个参数可以是样本,也可以是样本总体。
    样本就是一个int数,样本总体就是一个int数组(如果是样本总体,对总体中的样本个数就没有要求了)所以说最多可以使用30个数组的,所以我想一定会满足你的需求的。
    我使用如下的方法:
    定义一个含有40个元素的数组。
    int arg1[40] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40};在你获取了Excel的函数之后,需要将int数组转换成VARIANT中的数组。 VARIANT varArg1;
    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1]; 
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = 40;          // 这个是数组的长度。
    psa = SafeArrayCreate(VT_I4, 1, rgsabound); // VT_I4指定4byte的signed int
    for (long k = 0; k < (long)40; k++)
    {
    SafeArrayPutElement (psa, &k, &arg1[k]); // 这里是转换
    }
    varArg1.vt = VT_ARRAY | VT_I4;  // 指定VARIANT的数据类型,整型数组
    varArg1.parray = psa; // 赋值
            // 计算方差,不用的参数必须传递vtMissing,相当于NULL
    double dbRetVal = oFun.Var( varArg1, 
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing,
    vtMissing );
    // 记住用完一定要释放SAFEARRAY, 一面内存泄露
    SafeArrayDestroyData( psa );我计算的结果是:136.66666
    与Excel中的吻合。