代码之家  ›  专栏  ›  技术社区  ›  jtolle

为什么excel的“evaluate”方法是一个通用表达式求值器?

  •  1
  • jtolle  · 技术社区  · 16 年前

    最近有几个问题涉及 Application.Evaluate 方法可从Excel VBA调用。旧的xlm宏语言还公开了 EVALUATE() 功能。两者都很有用。但是,有人知道为什么公开的求值器可以处理一般表达式吗?

    我自己的直觉是,excel需要给人们提供一种从字符串地址获取范围的方法,并获得命名公式的值,而打开表达式求值器的门户是最简单的方法。(VBA版本的帮助说明了它的目的是“将Microsoft Excel名称转换为对象或值”。)但当然,您不需要计算任意表达式的能力。(也就是说,excel可以提供 Name.Evaluate 方法或其他方法。)

    应用程序.评估 好像…还没完成。它的完整行为没有很好的记录,而且有很多古怪和限制(如Charles Williams在这里所描述的: http://www.decisionmodels.com/calcsecretsh.htm )暴露的东西。

    我想答案可能很简单:“为什么不揭发它?”,但我想知道是什么设计决策导致了这个特性以它的形式出现。如果不行,我很想听听其他的预感。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Charles Williams    16 年前

    好吧,我认为这需要使vba能够从命名公式(或包含公式的字符串)中获取结果,(好吧,还有一个丑陋的方法,将公式插入到一个备用单元格中,然后读取结果,但例如,这在udf中是行不通的)。

    在vba中,确定定义的名称是否包含范围引用或公式的复杂过程。对两种情况都使用evaluate works。

    有时,将excel公式构建为字符串并对其求值也非常高效和简单,而不必将excel中的所有数据导入vba,然后在vba中进行计算。(将excel中的数据转换成vba的成本很高,而在当前的.net实现中更是如此)。