c++ - 从 C++ xll 返回多维数组到 excel

标签 c++ arrays export-to-excel xll

当我尝试传递一维数组时,这工作正常

__declspec(dllexport) LPXLOPER TestArray()
{
    XLOPER xlValues[2];
    xlValues[0].xltype = xltypeNum;
    xlValues[1].xltype = xltypeNum;
    xlValues[0].val.num = 123;
    xlValues[1].val.num = 345;

    static XLOPER xlArray;
    xlArray.xltype = xltypeMulti | xlbitDLLFree;
    xlArray.val.array.rows = 2;
    xlArray.val.array.columns = 1;
    xlArray.val.array.lparray = &xlValues[0];
    return (LPXLOPER)&xlArray;
}

但是当我尝试传递一个多维数组时,该函数返回#NUM!

__declspec(dllexport) LPXLOPER TestArray1()
{
    XLOPER xlValues[2][2];
    xlValues[0][0].xltype = xltypeNum;
    xlValues[0][1].xltype = xltypeNum;
    xlValues[1][0].xltype = xltypeNum;
    xlValues[1][1].xltype = xltypeNum;

    xlValues[0][0].val.num = 123;
    xlValues[0][1].val.num = 456;
    xlValues[1][0].val.num = 345;
    xlValues[1][1].val.num = 43456;

    static XLOPER xlArray;
    xlArray.xltype = xltypeMulti | xlbitDLLFree;
    xlArray.val.array.rows = 2;
    xlArray.val.array.columns = 2;
    xlArray.val.array.lparray = &xlValues[0][0];
    return (LPXLOPER)&xlArray;
}

有什么想法吗?提前致谢!!

最佳答案

在 TestArray( ) 和 TestArray1( ) 中,xlValues 是堆栈上的局部变量,因此当函数返回时它将被运行时释放。您需要使 xlValues 堆分配内存才能可靠地工作。 XLL 开发是一种黑暗艺术。如果你想认真对待它,你应该买一本 Steve Dalton 的书。

关于c++ - 从 C++ xll 返回多维数组到 excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533839/

相关文章:

javascript - html 从右到左导出表格到 excel

python - excel格式

javascript - 将 HTML 表格导出为包含文本和图像的 Excel

c++ - 这个指向成员转换的指​​针有什么问题?

javascript - Array.sort safari 问题

javascript - typescript 运行时数组类型 .map 方法可用

javascript - 当属性不相同时过滤数组属性的值

c++ - 从 boost::adjacency_list 图中删除多个顶点

c++ - vector 字符串字符替换在字符串中间 C++

c++ - 在现代 CMake 中将界面库添加为 SYSTEM