C++ 如何强制xlTypeNum在C++;使用Excel2007SDK
我正试图通过开发一个Excel加载项来实现我的目标。我正在以Excel2007SDK中的示例代码为指导尝试一些小函数。我在尝试在Excel中显示双类型数据时遇到困难。假设在执行示例代码时,UDF被称为displaydoull(),并且使用displaydoull(12.3)等实数类型数据的参数进行调用,那么如果我尝试使用displaydoull(A1)等单元格中引用实数类型数据的参数,示例代码仍然有效如果Excel工作表中的单元格A1的值为12.3,则示例代码不起作用 您可以在本段下面看到示例代码。任何提示都会帮助我沿着学习阶梯前进C++ 如何强制xlTypeNum在C++;使用Excel2007SDK,c++,excel,add-in,C++,Excel,Add In,我正试图通过开发一个Excel加载项来实现我的目标。我正在以Excel2007SDK中的示例代码为指导尝试一些小函数。我在尝试在Excel中显示双类型数据时遇到困难。假设在执行示例代码时,UDF被称为displaydoull(),并且使用displaydoull(12.3)等实数类型数据的参数进行调用,那么如果我尝试使用displaydoull(A1)等单元格中引用实数类型数据的参数,示例代码仍然有效如果Excel工作表中的单元格A1的值为12.3,则示例代码不起作用 您可以在本段下面看到示例代
_declspec(dllexport) LPXLOPER12 WINAPI DisplayDouble (LPXLOPER12 n)
{
static XLOPER12 xResult;
XLOPER12 xlt;
int error = -1;
double d;
switch (n->xltype)
{
case xltypeNum:
d = (double)n->val.num;
if (max < 0)
error = xlerrValue;
xResult.xltype = xltypeNum;
xResult.val.num = d;
break;
case xltypeSRef:
error = Excel12f(xlCoerce, &xlt, 2, n, TempNum12(xltypeNum));
if (!error)
{
error = -1;
d = xlt.val.w;
xResult.xltype = xltypeNum;
xResult.val.num = d;
}
Excel12f(xlFree, 0, 1, &xlt);
break;
default:
error = xlerrValue;
break;
}
if ( error != - 1 )
{
xResult.xltype = xltypeErr;
xResult.val.err = error;
}
//Word of caution - returning static XLOPERs/XLOPER12s is not thread safe
//for UDFs declared as thread safe, use alternate memory allocation mechanisms
return(LPXLOPER12) &xResult;
}
\u declspec(dllexport)LPXLOPER12 WINAPI DisplayDouble(LPXLOPER12 n)
{
静态XLOPER12 xResult;
xl12-xlt;
int错误=-1;
双d;
开关(n->xltype)
{
案例xltypeNum:
d=(双精度)n->val.num;
如果(最大值<0)
错误=错误值;
xResult.xltype=xltypeNum;
xResult.val.num=d;
打破
案例xltypeSRef:
错误=Excel12f(xlconcure,&xlt,2,n,TempNum12(xltypeNum));
如果(!错误)
{
误差=-1;
d=xlt.val.w;
xResult.xltype=xltypeNum;
xResult.val.num=d;
}
Excel12f(xlFree、0、1和xlt);
打破
违约:
错误=错误值;
打破
}
如果(错误!=-1)
{
xResult.xltype=xltypeErr;
xResult.val.err=错误;
}
//警告-返回静态XLOPERs/XLOPER12s不是线程安全的
//对于声明为线程安全的UDF,请使用备用内存分配机制
返回(LPXLOPER12)&xResult;
}
看起来您将值强制为xltypeNum,但随后采用整数值,d=xlt.val.w而不是d=xlt.val.num看起来您将值强制为xltypeNum,但随后采用整数值,d=xlt.val.w而不是d=xlt.val.num