我正在用Java类编写一个基本的电子表格编辑器(都是从头开始编写的)。我的任务是编写函数包(分析单元格的内容并输出计算结果)。目前,我可以通过将表达式转换为RPN,然后计算结果来解析一个表达式,比如1*(2+3)^4-5%6。现在,我正在努力将单元格名添加到表达式中。我想让单元名称解析器直接用它们的数值替换单元名称,但是我遇到了困难。我已经找到了一种在一个单元格中使用regex的方法(受https://stackoverflow.com/a/10073892/3165024启发),但我不知道如何使它与表达式中的多个单元格名称一起工作。
发布于 2014-01-07 08:58:49
注意:这种方法使用Regex并不是一种正确的方法。像A1这样的简单引用可以成功地被来自引用单元格的计算值替换,但是当您试图解析更复杂的表达式时,您的任务会变得更加困难,例如交叉表引用(=sheet 2!A1,='My sheet'!A1)、3d引用(=sheet 1:sheet 3!A1)、R1C1样式的引用(=R-1C3)、定义的名称引用(=name)等等。将单元格引用替换为计算值将不允许计算行(A2)之类的内置函数(结果是2),这需要引用参数而不是单元格值。
我认为您的RPN表单应该进行扩展,以包括用于简单引用、3d引用等的项。创建类似Excel表达式的解析器的最简单方法是使用编译器生成器。例如,看看“Compiler /R”(http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/),它有一个java版本。
https://stackoverflow.com/questions/20948201
复制相似问题