返回二维数组从excel中取得一个c ++ xll,回来
首先我知道这个问题已经在这里问了:
返回multidimensional array从Excel C ++ xll
我试图重振这个话题,但没有成功。 (OP最近没有那么活跃,从来没有。)这就是为什么我再次提出这个问题,提前抱歉。
我编写了一个函数返回一个(行)一维数组:
__declspec(dllexport) LPXLOPER12 WINAPI Get1DArray(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[0]; return static_cast<LPXLOPER12>(&xlArray); }
这样可行。 我从上面提到的问题中尝试了同样的错误OP(我就是这样来看待他的)。
我唯一的文档是excel sdk的msdn,它没有帮助我。 我编码的function,我用在网上find的例子。 没有find任何二维数组。 我知道史蒂夫·道尔顿关于xll的书,没有帮助。
我怀疑多维XLOPER12
arrays在一维数组中的股票价值,按行和列或列和行编号,但没有成功利用这种直觉…
这就是为什么我在这里。
一个简单的例子返回一个5 * 5的matrix。 不要忘记通过xlAutoFree12
函数释放分配的数组。
__declspec(dllexport) LPXLOPER12 WINAPI Get2DArray(void) { static XLOPER12 xlArray; int rows = 5; int cols = 5; xlArray.xltype = xltypeMulti | xlbitDLLFree; xlArray.val.array.rows = rows; xlArray.val.array.columns = cols; xlArray.val.array.lparray = reinterpret_cast<LPXLOPER12>(::malloc(rows * cols * sizeof(XLOPER12))); for (int r=0;r<rows;r++) { for (int c=0;c<cols;c++) { XLOPER12* var = xlArray.val.array.lparray + ((r* cols) + c); var->xltype = xltypeNum; var->val.num = r*c; } } return &xlArray; }