用于excel的Apache POI获取依赖单元格

时间:2014-12-11 09:45:46

标签: java excel apache apache-poi

我正在编写一个使用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 :

    }
}

1 个答案:

答案 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