【问题标题】:Apache POI for excel get dependent cellsApache POI for excel 获取依赖单元格
【发布时间】:2014-12-11 09:45:46
【问题描述】:

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

    }
}

【问题讨论】:

    标签: java excel apache apache-poi


    【解决方案1】:

    看看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

    【讨论】:

    • 你会希望 Ref* 和 Area* ptgs 获得它们所应用的单元格的引用,但基本上这是你最好的方法,是的!
    • 感谢 Udo 和 Gagravarr!我终于能够使用 FormulaParser 类来做到这一点。这是我获得单元格索引的方法:byte cla = ptg[i].getPtgClass(); if(cla == Ptg.CLASS_VALUE) { System.out.println (ptg[i].toFormulaString()); }
    • 它们被标记为内部......他们甚至重申:“仅供 POI 内部使用”。
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多