Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何强制xlTypeNum在C++;使用Excel2007SDK_C++_Excel_Add In - Fatal编程技术网

C++ 如何强制xlTypeNum在C++;使用Excel2007SDK

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,则示例代码不起作用 您可以在本段下面看到示例代

我正试图通过开发一个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