java - 是否可以从 Apache POI 中的 FuncVarPtg 获取操作数?

标签 java apache-poi

我想从某个单元格开始计算 Excel 电子表格的切片 ( http://en.wikipedia.org/wiki/Program_slicing )。这意味着我需要找出单元格中引用了哪些单元格,并递归地遵循这些引用。到目前为止一切顺利。

现在我遇到了 if 语句的问题(我假设还有其他更复杂的语句),因为我得到了 FuncVarPtg 类型的 Ptg,我不知道如何获取其中包含的操作数和引用。

FormulaParser.parse("IF(C2>D2,A1,B1)") 生成 if 条件 中引用的单元格,但不生成 thenelse 分支中的单元格。以下是一些示例性输出(单元格 C2 保存值 1.0,单元格 D2 保存值 0.0,即使用 RefPtg.getRow() 和 RefPtg.getColumn() 解析并遵循这些引用,没有出现问题)

fromCell IF(C2>D2,A1,B1)
ptg org.apache.poi.ss.formula.ptg.RefPtg [C2]
fromCell 1.0
ptg org.apache.poi.ss.formula.ptg.RefPtg [D2]
fromCell 0.0
ptg org.apache.poi.ss.formula.ptg.FuncVarPtg [IF nArgs=3]

简而言之,我的问题:有没有办法从 FuncVarPtg 中获取引用的操作数?

最佳答案

好吧,我的错误是我认为 POI 会以不同的方式处理这个问题。不需要访问 FuncVarPtg 来获取嵌套操作数(以及我的应用程序所需的 RefPtgs 和 AreaPtgs)。 FormulaParser.parse() 返回公式中出现的所有 Ptgs(包括嵌套的 Ptgs)的数组。因此,对于我的应用程序来说,过滤该数组中的 RefPtgs 和 AreaPtgs 就足够了。

关于java - 是否可以从 Apache POI 中的 FuncVarPtg 获取操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195020/

相关文章:

java - 使用java删除Excel中的 '0'和 'n/a'

java - Java同时显示繁体中文和简体中文

java - hibernate 泛型继承

java - 如何将 java bean 转换为属性文件?

java - 写入和读取名称中包含日期的文件

java - 如何通过 Apache POI 设置 Excel Sunburst Chart 中各个数据标签的文本属性?

java - Apache POI 解析错误

java - Apache POI autoSizeColumn() 无法正常工作

java - java excel api 可以满足我的要求吗?

java - 连接到 HP 质量中心 alm(版本 12.50)