2012-01-27 50 views
0

我遇到Range.Formula问题。该代码段是低于(假设Range对象已创建与is not null)Range.Formula返回一个使用单元格引用的字符串,为什么?

string formula; 
formula = Range.Formula;//it returns whatever is written in the formula, even the cell reference 

比方说,我有这样一个公式,=MyCalc(41, A1),使用相对单元格引用。在单元格A1中,有一个值为100.

因此,字符串变量formula的值总是=MyCalc(41, A1)而不是=MyCalc(41, 100),这是我想要的结果。

我不知道是否有办法让Range.Formula避免返回单元格引用。有任何想法吗?谢谢

+2

难道这不归结为神奇的想法 - 你希望它做一些*评估公式,并替换引用的单元格值,但不评估完整的公式(例如调用MyCalc并只给你结果)?你为什么期望它做到这一点? – 2012-01-27 07:44:31

+0

我无法将一个带有单元格引用的公式传递到Web服务上,因为它会产生错误的结果。所以我需要做一些预处理,并重构其中会有值的公式。 – woodykiddy 2012-01-27 08:30:04

+1

您正在申请一个错误 - 公式必须是输入的公式,其他任何结果都不正确。您可以尝试使用Evaluate从公式中获取结果(如果上游依赖链中存在未计算的单元格,则可能会失败),或者来自单元格的当前值,但单元格中的公式是单元格中的公式。 – 2012-01-27 08:41:45

回答

0

公式的全部内容就是给你准确的输入内容。你可以编写一个方法,通过一个公式并递归获取该单元格区域的值。

这不是为你做的原因是它可能会招致很多递归。如果单元格A1(在您的示例中)actaull引用单元格B2,它引用C100 ...等等。

我会写一个函数,它需要一个单元格引用并获取VALUE(getCellValue)(不是公式)。然后,我会编写一个获取公式的函数,使用正则表达式检查单元格引用,并在所有引用上调用getCellValue。

+0

这与我的想法非常相似。我正在考虑使用'string.split'并用单元格值替换单元格引用字符串。 – woodykiddy 2012-01-27 08:33:52

+0

那么,看看正则表达式,他们会做得更好:http://stackoverflow.com/questions/4932283/how-can-i-validate-an-excel-cell-reference-that-includes-一个片材名称 – 2012-01-27 10:03:46

相关问题