在我要解决的一个问题中,我必须用等效的单元格引用替换 Excel 公式中的范围值,例如,如果我有一个 Excel 公式:
=总和(F10:F14)
我必须将其替换为:
=总和(F10,F11,F12,F13,F14)。
我正在尝试匹配有助于我找到的正则表达式
- 如果 Excel 公式已使用包含以下模式的模式定义:“Sum”和“:”
- 提取范围内的单元格,如 F10:F14
不知何故,我被困在第 1 点:-)
为此,我创建了以下模式:
Regex formulaMatcher = new Regex(@"=*SUM\([\w]*[\w,]*[\w]+:[\w]+[\w]*[\w,]*\)*");
foreach (Match m in formulaMatcher.Matches("=SUM(F55,F151:F159)"))
m.Value.Dump();
现在,上述模式非常适用于公式:
// =SUM(F15,F25,F31:F35)
// =SUM(F10:F12,F26,F31)
// =SUM(F45,F55,F61:F63,F40)
// =F14-SUM(F16:F17)
// =SUM(F35:F37)
// =SUM(F10:F13)-F11
// =SUM(F27:F29)/3
// =F19-F21+SUM(F22:F23)
// =ROUND(F43-SUM(F23:F42),2)
// =SUM(F174:F178)+F134+F120+F97
但它失败了:SUM(F81:F89,F105:F113,F128:F135),即公式中涉及多个范围运算符的情况
请帮助我找出如何实现上述结果?
干杯,阿尼尔