Как заставить xlTypeNum удваиваться в C ++, используя Excel 2007 SDK - PullRequest
1 голос
/ 09 января 2012

Что ж, я пытаюсь пройти через разработку надстройки для Excel.Я пробую небольшие функции с примером кода в Excel 2007 SDK в качестве руководства.У меня возникают проблемы с попыткой отобразить данные двойного типа в Excel.Предполагая, что UDF вызывается DisplayDouble (), когда выполняется пример кода, и выполняется вызов с аргументом данных реального типа, например DisplayDouble (12.3), пример кода работает, даже если я пытаюсь использовать аргумент, который ссылается на данные реального типаиз ячейки, такой как DisplayDouble (A1), где ячейка A1 на листе Excel имеет значение 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;
}

1 Ответ

1 голос
/ 07 февраля 2012

похоже, что вы привели значение к xltypeNum, но затем берете целочисленное значение с d = xlt.val.w вместо d = xlt.val.num

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...