我正在编写一个使用apache POI读取excel文件的程序。我得到了所有的值,但我想知道哪些细胞依赖于其他细胞(使用细胞的公式)。
我尝试过使用String formula = cell.getCellFormula()
,但这只会返回单元格索引(例如H5)。有没有其他方法可以做到这一点?
这是我读取单元格的代码:
private void handleCell(int type,Cell cell)
{
switch (type)
{
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_FORMULA:
String form = cell.getCellFormula();
handleCell(cell.getCachedFormulaResultType(),cell);
break;
default :
}
}
答案 0 :(得分:2)
查看org.apache.poi.ss.formula.FormulaParser
。
它有一个静态方法
public static Ptg[] parse(
java.lang.String formula,
FormulaParsingWorkbook workbook,
int formulaType,
int sheetIndex)
根据文档,它将公式字符串解析为RPN顺序的标记列表。
可以使用public final byte getPtgClass()
检查标记(Ptg =“parse things”)的类型(REF / VALUE / ARRAY)。
我没有测试过,但它可能是要走的路。解析公式,然后检查每个Ptg条目的类型(REF?)并获取目标单元格。
请参阅:
https://poi.apache.org/apidocs/org/apache/poi/ss/formula/FormulaParser.html https://poi.apache.org/apidocs/org/apache/poi/ss/formula/ptg/Ptg.html