公式
公式的计算可使用堆栈的思想将运算符后置,如: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就更新
这些都是我已经实现了的,绝对可行……