当 xlCoerce 返回一个值时,它会再次计算单元格中的公式



当我使用 ExcelDna 在 C# 中创建简单的 UDF 时遇到了一个问题

该函数使用以下内容:

  var reference = XlCall.Excel(XlCall.xlfCaller);
  string oldValue = ((ExcelReference)reference).GetValue().ToString();

除非我指定了IsMacroType=true,否则会导致循环引用错误(GetValue尝试通过再次调用 UDF 来重新计算单元格),这将函数标记为类 2(#添加到公式中)。

我不知道它将如何连接到循环错误。但我想ExcelReference.GetValue()有时会评估细胞,有时不会?

似乎2类只影响xlfCaller

后来我检查了ExcelReference的源代码,原来实际上是xlCoerce被调用。

另外,我注意到当我在单元格上按 F2 时,无论单元格是什么,GetValue()都会返回 0。当我按 Ctrl+Alt+F9 强制重新计算所有时,GetValue()返回之前的计算值。

有人可以进一步详细说明我吗?xlCoerce 如何在单元格值/公式上工作,第 2 类如何影响它?

xlCoerce只是获取引用中包含的值的标准方法。就其本身而言,使用 ExcelReference 进行此调用不应导致单元格重新计算。

如果您的函数注册为宏表等效函数(通过在 Excel-DNA 的声明中添加IsMacroType=true),那么它将能够在计算时读取工作表上的任何值,包括调用单元格的先前值。在使用 F2 编辑公式的情况下,这不仅仅是重新计算,而是单元格内容的整个重新输入,因此与强制重新计算相比,这行为是有道理的。

它可能不会直接回答你的问题,但查尔斯威廉姆斯在这里对Excel计算过程有很好的描述:http://www.decisionmodels.com/calcsecretsc.htm。

相关内容

最新更新