当 xlCoerce 返回一个值时,它会再次计算单元格中的公式吗?
Posted
技术标签:
【中文标题】当 xlCoerce 返回一个值时,它会再次计算单元格中的公式吗?【英文标题】:When xlCoerce returns a value, does it evaluate the formula in a cell again? 【发布时间】:2012-11-15 13:46:29 【问题描述】:我在 C# 中使用 ExcelDna 制作简单的 UDF 时遇到问题
函数使用这个:
var reference = XlCall.Excel(XlCall.xlfCaller);
string oldValue = ((ExcelReference)reference).GetValue().ToString();
这将导致循环引用错误(GetValue
尝试通过再次调用 UDF 重新评估单元格),除非我指定 IsMacroType=true
,这会将函数标记为类 2(将 #
添加到公式中)。
我不知道它会如何连接到循环错误。但我猜ExcelReference.GetValue()
有时会评估单元格,有时不会?
似乎2级只影响xlfCaller
,
后来查了ExcelReference
的源码,原来是调用了xlCoerce。
另外,我注意到当我在一个单元格上按 F2 时,GetValue()
无论单元格是什么都会返回 0。而当我按下 Ctrl+Alt+F9 强制重新计算所有时,GetValue()
返回之前计算的值。
有人可以详细说明一下吗?无论如何,xlCoerce 如何处理单元格值/公式以及第 2 类对其有何影响?
【问题讨论】:
【参考方案1】:xlCoerce
只是获取引用中包含的值的标准方法。就其本身而言,使用 ExcelReference 进行此调用不应导致单元格重新计算。
如果您的函数注册为宏表等效函数(通过在 Excel-DNA 的声明中添加 IsMacroType=true
),那么它将能够在计算时读取表上的任何值,包括调用的先前值细胞。在您使用 F2 编辑公式的情况下,这不仅仅是重新计算,而是整个单元格内容的重新输入,因此与强制重新计算相比,这具有不同的行为是有道理的。
它可能无法直接回答您的问题,但 Charles Williams 在此处对 Excel 计算过程进行了很好的描述:http://www.decisionmodels.com/calcsecretsc.htm。
【讨论】:
以上是关于当 xlCoerce 返回一个值时,它会再次计算单元格中的公式吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 Ionic4 Modal [object Object] 返回数据