Как вернуть массив из функции XLL

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

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

__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;
}

4

Решение

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

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

1. выберите одну строку и два столбца

2. Введите команду = 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;
}
3

Другие решения

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

В новой обстановке без согласия — perdre de vue, d’abord et longtemps, разорение.

Просто шучу. Может быть, это будет работать для вас.

1

По вопросам рекламы [email protected]