Возврат массива в Excel XLL

Я использую Excel 2010 и Excel 2010 XLL SDK. Я пытаюсь с этой функцией:

__declspec(dllexport) LPXLOPER12 WINAPI dfutil(void)
{     
        static XLOPER12 xlArray;
        XLOPER12 xlValues[4];
        int i;
        double z = 3.1456;
        for (i = 0; i < 4; ++i)
        {
        xlValues[i].val.num = i*z;
        xlValues[i].xltype = xltypeNum;
        }

        xlArray.xltype = xltypeMulti;
        xlArray.val.array.lparray = xlValues;//&xlValues[0];
        xlArray.val.array.rows = 1;
        xlArray.val.array.columns = 4;
        return (LPXLOPER12) &xlArray;
}

Определение:

{
      L"dfutil",
      L"QU",        
      L"dfutil",
      L"",
      L"1",
      L"SimpleXll2007",
      L"",                  
      L"",                  
      L"ReturnArray function help",
      L"",
      L""
},

Когда размер массива xlValues равен 4, возвращается значение excel 4, но третье значение равно TRUE (??). Когда размер массива xlValues равен 10, он возвращает в Excel ошибку #ЧИСЛО. Как правильно вернуть массив в Excel?

P.S. Я использую такой шаблон в этой статье http://blogs.msdn.com/b/andreww/archive/2007/12/09/building-an-excel-xll-in-cc-with-vs-2008..aspx


person amaranth    schedule 04.07.2013    source источник


Ответы (1)


Вам также нужно сделать xlValues ​​статическим. Использование https://xll.codeplex.com сделает вашу жизнь проще.

person Keith A. Lewis    schedule 09.07.2013