2013-02-22 9 views
4

Я новичок в написании XLL, Кто-нибудь знает, как вернуть массив 6x1 в Excel?Как вернуть массив из функции XLL

Ниже моя функция (некоторые коды пришли из другого поста):

__declspec(dllexport) LPXLOPER12 WINAPI GetArr(char* arg1, char* arg2) 
{ 
    vector<double> arr = functionReturnVector; 

    XLOPER12 list; 
    list.xltype = xltypeMulti | xlbitDLLFree; 
    list.val.array.lparray = new XLOPER12[6]; 
    list.val.array.rows = 6; 
    list.val.array.columns = 1; 
    for(int i = 0; i < 6; ++i) { 
     list.val.array.lparray[i] = arr[i]; // error: IntelliSense: no operator "=" matches these operands 
    } 
return &list; 
} 

[2013-02-23] В настоящее время я читаю коды из XLL RETURN ARRAY и пересмотреть свой код, он может скомпилировать, но возвращается 0 ...

__declspec(dllexport) LPXLOPER12 WINAPI GetArr(void) 
{ 
XLOPER xlArray, xlValues[2]; 

xlValues[0].xltype = xltypeNum; 
xlValues[1].xltype = xltypeNum; 
xlValues[0].val.num = 11; 
xlValues[1].val.num = 17; 

xlArray.xltype = xltypeMulti|xlbitDLLFree; 
xlArray.val.array.rows = 1; 
xlArray.val.array.columns = 2; 
xlArray.val.array.lparray = &xlValues; 

return &xlArray; 
} 
+0

Я ничего не знаю о xll, но «список» - это локальная переменная в первую очередь. вы не можете указать указатели на локальные переменные. второй arr [i] имеет тип , когда list.val.array.lparray [i] имеет тип (вы только что сделали новый XLOPER12 [6] несколько строк раньше). – user928204

+0

Возможно дубликатом вопрос - [Смотреть здесь] [1] [1]: http://stackoverflow.com/questions/14301998/how-to-return-an-array-from-an-xll -udf –

+0

Да, я прочитал это сообщение, но код все еще не работает. – hkdeveloper758

ответ

3

Теперь я могу распечатать массив 1X2 в листе Excel, вот мой код.

** использовать Func типа подписи U

1.select одну строку и две колонки

2.Type команду = GetArray() в первой ячейке

3.Ctrl + Shift + Enter

__declspec(dllexport) LPXLOPER12 WINAPI GetArray(void) 
{ 
    static XLOPER12 xlArray; 
    XLOPER12 xlValues[2]; 
    xlValues[0].xltype = xltypeNum; 
    xlValues[1].xltype = xltypeNum; 
    xlValues[0].val.num = 123; 
    xlValues[1].val.num = 456; 
    xlArray.xltype = xltypeMulti|xlbitDLLFree; 
    xlArray.val.array.rows = 1; 
    xlArray.val.array.columns = 2; 
    xlArray.val.array.lparray = &xlValues; 
    return (LPXLOPER12)&xlArray; 
} 
+0

Попытка вы рассказать мне о типе «XLOPER12 (*) [2]» не может быть назначена сущности типа «xloper12 *» при компиляции с сообществом visual studio 2013. Любая идея? –

+0

Это должно быть 'xlArray .val.array.lparray = & xlValues ​​[0]; ', а не' xlArray.val.array.lparray = & xlValues; ' –

+0

Btw, как это сделать, если я хочу вернуть двумерный массив? –

1

может http://xll.codplex.com может помочь вам решить вашу проблему, но, как и другие люди, которые пытаются помочь вам, ваш код, кажется, довольно далеко от берега.

Находится на территории, где нет разрешения на посещение, d'abord et longtemps, tout rivage.

Просто шучу. Возможно, это сработает для вас.

Смежные вопросы