请教实现单元格公式的算法方案,谢谢!
http://www.cnprog.com/questions/40/如何实现如Excel的单元格公式?

解决方案 »

  1.   

    觉得难点主要还是在公式的解析上.
    单元格之间的依存关系肯定要构建数据结构来进行描述.
    这样才能知道从哪个单元格开始计算.
    不过这个结构不是树结构.
    其实用javascript来定义数据结构其实很容易实现.另外,计算之前还要进行依存关系的校验.
    以避免出现循环依赖的关系.
      

  2.   

    如果只是简单的话 巧用eval
      

  3.   

    HOHO
    都找不到这个帖子了.
    花点时间琢磨一下这个算法.
      

  4.   

    第1步,遍历填充所有不含公式的静态单元格。
    第2步,遍历未填充的公式单元格,若公式涉及的因子单元格都已填充,则计算并填充该单元格。
    ……
    第N步,一直重复第2步的操作,直到本步未能填充任何单元格。第2步到第N步的过程就是一个while迭代。
    第N+1步,检查是否还有剩余的未填充的公式单元格,如有,则表明其公式是无效的。

    每填充一个单元格,标记该单元格的filled属性为true
    举例来说,
    A1=1,B2=2,C3=3, C4=A1+B2, B3=C4+C3,B4=B4+5
    第1步,填充A1,B2,C3
    第2步,填充C4,因为C4的因子单元格(A1和B2)都已填充。
    第3步,填充B3,因为B3的因子单元格(C4和C3)都已填充(C3在第1步已填充,C4在第2步已填充)。
    第4步,找不到可填充的单元格了,退出循环。
    第5步,检查得知B4未被填充,表明B4的公式是无效的。
    完毕。
    已经讲的很清楚了,代码我就不写了。
      

  5.   

    楼上这么做是一种折中的办法
    就是有两个问题:
    1.要分析每个cell公式中,有哪些被引用的cell,本身是个没有解决的问题
    2.这样做每次更新一个cell,简要扫描grid中所有的cell我的想法是,能够把公式树中的cell放到一根“树”上,描述cell之间的依赖关系。这样更新某个cell,就有办法知道需要更新被影响的其他cells。