我想要把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);
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);
解决方案 »
- BeauGauge控件使用问题
- vc2008 sp1 office 2007风格下如何去掉标题栏及mschar他问题
- 学了VC,还想学一门语言,学JAVA还是C#好?
- 请问com怎么返回一个数组?一定要可以跨语言调用的!!
- 高分求救:为什么我的Socket不能关闭?
- 如何在程序中读取 .iso 文件,还有,如何实现虚拟光驱?
- 晕,用TC3.0遇到奇怪问题!
- 急!!请高手说说鼠标钩子函数的参数,手头没有MSDN.
- SendMessage似乎未等消息处理完就返回了
- 100分: 关于在MFC开发的软件中用OLE打开多页Word文档,显示具体的页面的问题
- 如何获取单个程序进程所占用的内存空间大小
- 关于 属性页, 子对话框 与 主对话框 之间消息传递的问题
先要明确一点,用接口之前要先关联起来
是因为你没有获得WorksheetFunction的接口指针。你按照下面的方法试一下:
WorksheetFunction oFun;
oFun.AttachDispatch( m_oExcelApp.GetWorksheetFunction(), TRUE );
CString strMsg;
strMsg.Format( _T( "%f" ), oFun.Ln( 9 ) );
AfxMessageBox( strMsg );我已经试过了,值是2.197225
在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中的吻合。