Excel评估树bug?嵌套调用addin函数调用20,000次

时间:2012-08-17 16:33:53

标签: excel excel-2003 excel-addins

Excel 2003,Windows XP SP3:

我们有许多Excel用户使用非常大的复杂Excel工作簿。典型的工作簿可能有60多个工作表,大小超过70MB。我们有一个.xll插件,我们生产并用于这些电子表格。我们的插件具有广泛的调试和日志记录功能。

我们注意到一些非常奇怪和不稳定的行为,我们无法一致地重现这些行为。我在这里描述了问题的典型表现。

一个电子表格的范围之一有一个公式数组,它涉及对函数的嵌套调用,包括Excel函数和我们自己的插件函数。公式可能类似于:

{=IF(cndtn,AddinFcn1(rng,INDIRECT(VLOOKUP($A2549,rng2,col,0)),AddinFcn2(param)),-1)}

其中AddinFcn1和AddinFcn2是我们插件中的注册函数。我们可以监控Excel调用每个插件功能的次数,并匹配导致调用的单元或范围评估的所有调用。如果我们在一个干净的Excel中加载插件和工作簿,然后计算工作簿(“F9”),计算可能会完成第一次,第二次,甚至10次,我们可以看到对AddinFcn2和AddinFcn1的单次调用源于对含有上式的范围的评价。但是一些次,事情开始变得疯狂:在第三个“F9”上,内部AddinFcn2可能突然被excel调用19次,然后在第4个“F9”,内部AddinFcn2被调用20,000次。或者也许一切都很好,直到第10个“F9”突然内部AddinFcn2在评估范围时被调用了19,000次。奇怪的是,外部函数AddinFcn1仍然只被调用一次。

当这种情况发生时似乎没有押韵或理由,或者调用该函数的次数。进入呼叫的数据,实际上是电子表格中的数据,每个F9都是相同的 - 从一个计算到下一个计算没有任何变化。

有没有人见过类似的行为?有没有人猜测什么可能导致Excel(不必要地)重新计算内部函数调用数十,甚至数十万次?

0 个答案:

没有答案