返回二维数组从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的书,没有帮助。

我怀疑多维XLOPER12arrays在一维数组中的股票价值,按行和列或列和行编号,但没有成功利用这种直觉…

这就是为什么我在这里。

一个简单的例子返回一个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; }