gpt4 book ai didi

c++ - 在c++ xll中从excel中接收一个矩阵,修改并返回

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:11 24 4
gpt4 key购买 nike

我编写了一个 xll 函数,从 excel 接收矩阵,修改它并返回它:

__declspec(dllexport) LPXLOPER12 WINAPI ZZZZUpdateArray1(LPXLOPER12 arrayin)
{
if (arrayin->xltype == xltypeMulti | xlbitDLLFree)
{
double ScaleFactor = 2.0;
int rows = arrayin->val.array.rows;
int cols = arrayin->val.array.columns;
static XLOPER12 xlArray;
xlArray.val.array.lparray = reinterpret_cast<LPXLOPER12>(::new XLOPER12[rows * cols] /*::malloc(rows * cols * sizeof(XLOPER12))*/);
for (int r = 0; r<rows; r++)
{
for (int c = 0; c<cols; c++)
{
if ((arrayin->val.array.lparray + ((r* cols) + c))->xltype == xltypeNum)
{
XLOPER12* var = xlArray.val.array.lparray + ((r* cols) + c);
var->xltype = xltypeNum;
var->val.num = ScaleFactor*(arrayin->val.array.lparray + ((r* cols) + c))->val.num ;
}
}
}
return static_cast<LPXLOPER12>(&xlArray);
}
return arrayin;
}

但是它崩溃了

if ((arrayin->val.array.lparray + ((r* cols) + c))->xltype == xltypeNum)

例如,如果我从 excel 中获取一个 5*5 矩阵,在调试时我看到它有 19 行和 20 列,发生了什么!?

可能是因为当我收到 LPXLOPER12 arrayin 时,它表示一个 excel 范围,比 5*5 矩阵复杂得多。那么如何访问它包含的5*5矩阵呢?

最佳答案

  • 使用Excel代码Q注册输入参数。
  • 您需要正确声明返回变量:

    // initialize the return variable
    xlArray.val.array.rows = rows;
    xlArray.val.array.columns = cols;
    xlArray.xltype = xltypeMulti | xlbitDLLFree;

关于c++ - 在c++ xll中从excel中接收一个矩阵,修改并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com