公式
公式的计算可使用堆栈的思想将运算符后置,如:C1=(A1+A2)*5+B1可以变换成:[A1,A2+5*B1]
计算过程为,假设A1=1,A2=2,B1=3
C1=(A1+A2)*5+B1
[A1,A2+5*B1]
[1,2,+,5*,3,+]
[3,5*,3+]
[15,3+]
[18]
这样即可计算出最终答案C1=18
当计算公式中值发生变化时处理方法
前面提到过自定义数据结构,可以定义单元格的依赖
C1依赖A1,A2,B1,当这个三个单元格的值发生变化时需要重新计算C1的值
方式一
第一次我采用的方法邻接关系(有向图),假设上面的表格是3*3,则矩阵为
| * | A1 | A2 | A3 | B1 | B2 | B3 | C1 | C2 | C3 |
|---|---|---|---|---|---|---|---|---|---|
| A1 | - | - | - | - | - | - | T | - | - |
| A2 | - | - | - | - | - | - | T | - | - |
| A3 | - | - | - | - | - | - | - | - | - |
| B1 | - | - | - | - | - | - | T | - | - |
| B2 | - | - | - | - | - | - | - | - | - |
| B3 | - | - | - | - | - | - | - | - | - |
| C1 | - | - | - | - | - | - | - | - | - |
| C2 | - | - | - | - | - | - | - | - | - |
| C3 | - | - | - | - | - | - | - | - | - |
加设当A1的值发生变化,只查第二行,法向C1依赖他,然后更新C1,继续查C1列发现没有单元格依赖就停止了
方式二
采用订阅,来触发更新,
写一个事件类,C1,订阅A1A2B1,当这三个单元格值发生变化时发出change事件,C1就更新
这些都是我已经实现了的,绝对可行……
8649

被折叠的 条评论
为什么被折叠?



