XLL问题与xlfEvaluate

我有一个用XL20编写的非常简单的函数,使用VS2012就有这个问题。 我曾试着在MSDN和Steve Dalton的书中读过,我看不出我做错了什么。 棘手的一点是,我需要我的函数来读取工作表单元格中的值,而不是调用它的值。 该函数不带参数,并返回一个整数。 我已经将它声明为J#(#表示它可以按照Dalton的build议调用XLMfunction,尽pipe如此,我仍然会遇到同样的问题)。 我没有包括我的function的宣言来节省空间,但它很简单,我不认为这是问题的原因。

这第一个代码块工作正常。 我写的只是为了build立信心。

//This block works correctly. A trial copied from the old Excel 97 documentation XLOPER12 xlInput1, xlOutput2; /* Evaluate the string "2+3" */ xlInput1.xltype = xltypeStr; xlInput1.val.str = L"\0032+3"; //prefix with string length in Octal Excel12(xlfEvaluate, &xlOutput2, 1, (LPXLOPER12) &xlInput1); //works OK, and xlOutput2 contains 5 

但是这第二块不起作用。 我看不出为什么。 我试图从一个单元格读取一个值,这个单元格与调用该函数的单元格不同。 我得到的是返回XLOPER12,其中包含一个错误(xltypeErr)和val.num字段中的垃圾值(工作表单元格确实包含一个整数值)。

 //This block does not work XLOPER12 xlInput3, xlOutput3; /* Look up the name Tst on the active sheet called Sht */ xlInput3.xltype = xltypeStr; xlInput3.val.str = L"\003Tst"; //this also gives problems regardless of whether the string is defined as \004!Tst or \007Sht!Tst Excel12(xlfEvaluate, &xlOutput3, 1, (LPXLOPER12) &xlInput3); //xlOutput3 now has a type of xltypeErr, rather than the correct integer value on the worksheet 

你能解释一下怎么回事?

如果您正在尝试从与调用该函数的单元格不同的单元格读取值,则需要一个参数来引用该不同的单元格。 例如在A1中,你可能有'= myfunc(A2)'。 那么你的C ++扩展func将需要被声明为'JP#',其中P对应于A2单元格引用参数。 如果Excel可以parsing“A2”引用,它将传入一个XLOPER,其值为xltypeNum,xltypeInt或xltypeStr,具体取决于A2的内容。 如果没有,你可能会得到一个xltypeSRef。

xlfEvaluate:这里是MS文档https://msdn.microsoft.com/en-us/library/office/bb687913(v=office.15).aspx

请注意,MS指定传递给xlfEvaluate的string必须'只包含函数,不包含等价的命令'。 我怀疑L“\ 003Tst”不对应于Excel中已知的任何函数。 在我的Excel 2013中没有内置函数TST。可能你有一个插件提供了一个名为Tst的函数,但我猜不是。 所以请尝试将xlInput3.val.str更改为L“\ 006RAND()”,看看会发生什么。