Excel XLL命令(非UDF):xlSet无法设置多个值
我对XLL编程相当陌生,但我相信我已经完成了关于这个小问题的家庭作业。我试图使用xlSet设置多个单元格值,但xlSet只是复制数组的第一个值,就好像我传递了一个引用一样。相反,如果我连续为每个单元格单独调用xlSet,它就会工作。但它很难看,毫无疑问,速度很慢 我知道不能从UDF调用xlSet。这不是UDF。在其他地方,我看到有人在xlMulti中存在结构对齐问题,但我正在将相同的xlMulti发送回Excel,所以这不是问题。(无论如何,我尝试了/Zp8编译器开关。) 我从SDK框架的东西开始,例如TempActiveRef(1,1,0,2),然后用更直接的XLCALL.H东西替换这些调用,主要是为了增加我在这里得到响应的机会 Office 2010,VSTO 2010,Win7 64位SP1 以下是哪些有效,哪些无效:Excel XLL命令(非UDF):xlSet无法设置多个值,excel,xll,Excel,Xll,我对XLL编程相当陌生,但我相信我已经完成了关于这个小问题的家庭作业。我试图使用xlSet设置多个单元格值,但xlSet只是复制数组的第一个值,就好像我传递了一个引用一样。相反,如果我连续为每个单元格单独调用xlSet,它就会工作。但它很难看,毫无疑问,速度很慢 我知道不能从UDF调用xlSet。这不是UDF。在其他地方,我看到有人在xlMulti中存在结构对齐问题,但我正在将相同的xlMulti发送回Excel,所以这不是问题。(无论如何,我尝试了/Zp8编译器开关。) 我从SDK框架的东西开
__declspec(dllexport) int WINAPI testCmd(void)
{
XLOPER12 ref, xValsInMulti, xResSet;
XLMREF12 mref;
int i, res;
// Build an xltypeRef XLOPER12 that points to three cells, A2:C2
res = Excel12(xlSheetId, &ref, 0);
if (res != xlretSuccess) return 0;
ref.xltype = xltypeRef;
ref.val.mref.lpmref = &mref;
mref.count = 1;
mref.reftbl[0].rwFirst = mref.reftbl[0].rwLast = 1;
mref.reftbl[0].colFirst = 0;
mref.reftbl[0].colLast = 2;
// Fetch the cell values into an xltypeMulti.
// This works. Returns 0. And xValsInMulti.type becomes xlTypeMulti
res = Excel12(xlCoerce, &xValsInMulti, 1, &ref );
// Change cell reference to the next row (A3:C3)
mref.reftbl[0].rwFirst = mref.reftbl[0].rwLast = 2;
// Attempt to set the values. Doesn't work. All cells become value of A2.
Excel12(xlSet, &xResSet, 2, &ref, xValsInMulti);
Excel12(xlcAlert, 0, 1, &xResSet); // Displays "TRUE"
// Try again (in the next row) setting each cell individually. This works.
mref.reftbl[0].rwFirst = mref.reftbl[0].rwLast = 3;
for (i=0; i<3; i++)
{
mref.reftbl[0].colFirst = mref.reftbl[0].colLast = i;
Excel12(
xlSet, &xResSet, 2, &ref, xValsInMulti.val.array.lparray+i
);
Excel12(xlcAlert, 0, 1, &xResSet); // Displays "TRUE"
}
Excel12(xlFree, 0, 1, &xValsInMulti);
return 1;
}
\uuuu declspec(dllexport)int-WINAPI-testCmd(void)
{
XLOPER12 ref,xValsInMulti,XRESET;
XLMREF12-mref;
int i,res;
//构建一个指向三个单元格A2:C2的xltypeRef XLOPER12
res=Excel12(xlSheetId和ref,0);
如果(res!=xlretSuccess)返回0;
ref.xltype=xltypeRef;
ref.val.mref.lpmref=&mref;
mref.count=1;
mref.reftbl[0]。rwFirst=mref.reftbl[0]。rwLast=1;
mref.reftbl[0].colFirst=0;
mref.reftbl[0]。colLast=2;
//将单元格值提取到xltypeMulti中。
//此操作有效。返回0。xValsInMulti.type变为xlTypeMulti
res=Excel12(xl强制、&xValsInMulti、1和ref);
//将单元格引用更改为下一行(A3:C3)
mref.reftbl[0]。rwFirst=mref.reftbl[0]。rwLast=2;
//尝试设置值。不起作用。所有单元格都成为A2的值。
Excel12(xlSet和XRESET、2和ref、xValsInMulti);
Excel12(xlcAlert、0、1和xreset);//显示“TRUE”
//请再试一次(在下一行中)分别设置每个单元格。此操作有效。
mref.reftbl[0]。rwFirst=mref.reftbl[0]。rwLast=3;
对于(i=0;我不确定我是否理解您的问题,但我测试了您的代码,我没有遇到任何问题,Excel12(xlSet,&xreset,2,&ref,xValsInMulti)
将单元格A3:C3的值换行为单元格A2:C2的值-所有单元格都不取A2的值(如循环中所示).ps:在Excel 2016-64位单击上测试,非常感谢您在您的系统上测试我的代码。由于您的成功,我对我的源代码感到安全,因此我将重新检查生成文件与我的环境的匹配情况。