应对Excel1900年2月29日的bug

与Excel逻辑的差异

当前项目限制:

通用数据结构设计

cell.f  代表公式字符串
cell.text 代表最终展示的字符串

cell.v   代表一个数据对象,含有.cellStyle属性,可以用这个cellStyle属性来获得cell.text
cell.fromArray : 引用的对象
cell.toArray : 被引用的对象
cell.spillFromArray : 被哪个单元格溢出
cell.spillToArray : 溢出到哪些单元格
cell.valueProxy: 对cell.v的访问代理,可以判定是否是错误

将会废弃的属性:
cell.t: 类型,包括e,s,n --》 感觉可以废弃
cell.w: 错误信息。

常数配置

punctionObj: 有特殊含义的标点

export const punctuationObj= { // todo: 需要把这个常数放到config里面
  percent: "%", // 单元运算符
  star : '*', //双元运算符
  plus: '+', //双元运算符
  dash: '-', //双元运算符 或单元运算符
  slash: '/', //双元运算符
  caret: '^', //双元运算符
  exclamation: '!', // ok
  ampersand: '&', //双元运算符
  lessThen: '<', //双元运算符
  greaterThen: '>', //双元运算符
  leftParentheses: '(',
  rightParentheses: ')',
  comma: ',',
  leftBracket: '[',
  rightBracket: ']',
  leftBrace : '}',
  rightBrace : '{',
  equal: "=", // 双元运算符是否等于
  colon: ":",
  hash: "#", // 可以用作溢出运算符,新的溢出功能
  at:'@', // 引用运算符,我也不是很理解
  space: " ", // 代表可以忽略的空白,或者为交集运算符
};

export const multiChartOperator ={
  notEqual: "<>",
  greaterEqual: ">=",
  lessEqual: "<=",
}

export const singleChartOperator ={
  percent: "%", // 单元运算符
  star : '*', //双元运算符
  plus: '+', //双元运算符
  slash: '/', //双元运算符
  caret: '^', //双元运算符
  ampersand: '&', //双元运算符
  lessThen: '<', //双元运算符
  greaterThen: '>', //双元运算符
  equal: "=", // 双元运算符是否等于
}

export const preDefinedConst={
  true: "TRUE",
  false:"FALSE"
}

export const moneyUnitObj = {
  dollar:"$",
  rmb: "¥",
}

structural公式解析算法

预处理

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/effab018-8ef1-4a9e-8723-1b0a33f26856/Untitled.png