2014-01-06 31 views
0

我正在使用我的Java类处理基本电子表格编辑器(全部从头开始编写)。我负责编写函数包(分析单元格的内容并输出计算结果)。 目前我可以通过将其转换为RPN并计算结果来解析表达式,如1*(2+3)^4-5%6。现在我正在为该表达式添加单元名称。我想单元名称解析器要做的是直接用它们的数字值替换单元名称,但我很难。我已经设法找到一种使用正则表达式的方法(灵感来自https://stackoverflow.com/a/10073892/3165024),但我不知道如何使用表达式中的多个单元格名称。解析电子表格语法

回答

0

只是一个说明:使用正则表达式这种方法是不正确的方式。像A1这样的简单引用可以被引用单元格中的 值成功替换,但当您试图解析更复杂的表达式时,例如 交叉引用(= Sheet2!A1,='My sheet' !A1),3d引用(= Sheet1:Sheet3!A1),引用R1C1样式(= R [-1] C3),定义名称引用(=名称)等。 替换计算值的单元格引用将不允许您计算像ROW(A2)(结果为2), 等内置函数,它需要引用参数而不是单元格值。

我认为您的RPN表单应该放大以包含简单引用,3d引用等项目。 为类似Excel的表达式创建解析器的最简单方法是使用编译器生成器。例如,看看“编译器生成器Coco/R”(http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/),它有一个适用于java的版本。