Browse Source

perf(formula performance): coding

master
wbfsa 5 years ago
parent
commit
d7685e3648
  1. 117
      src/global/formula.js
  2. 2
      src/index.html

117
src/global/formula.js

@ -4812,7 +4812,7 @@ const luckysheetformula = {
if(typeof(cellRangeFunction)=="function"){
cellRangeFunction(str_nb);
}
this.isFunctionRangeSaveChange(str, r, c, index, dynamicArray_compute);
// this.isFunctionRangeSaveChange(str, r, c, index, dynamicArray_compute);
// console.log(function_str, str, this.isFunctionRangeSave,r,c);
}
}
@ -4953,6 +4953,121 @@ const luckysheetformula = {
this.execFunctionGroup();
}
},
execFunctionGroup1: function(origin_r, origin_c, value, index, data, isForce=false) {
let _this = this;
if (data == null) {
data = Store.flowdata;
}
if (!window.luckysheet_compareWith) {
window.luckysheet_compareWith = luckysheet_compareWith;
window.luckysheet_getarraydata = luckysheet_getarraydata;
window.luckysheet_getcelldata = luckysheet_getcelldata;
window.luckysheet_parseData = luckysheet_parseData;
window.luckysheet_getValue = luckysheet_getValue;
window.luckysheet_indirect_check = luckysheet_indirect_check;
window.luckysheet_indirect_check_return = luckysheet_indirect_check_return;
window.luckysheet_offset_check = luckysheet_offset_check;
window.luckysheet_calcADPMM = luckysheet_calcADPMM;
window.luckysheet_getSpecialReference = luckysheet_getSpecialReference;
}
if(_this.execFunctionGlobalData==null){
_this.execFunctionGlobalData = {};
}
let luckysheetfile = getluckysheetfile();
let dynamicArray_compute = luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["dynamicArray_compute"] == null ? {} : luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["dynamicArray_compute"];
if (index == null) {
index = Store.currentSheetIndex;
}
if (value != null) {
//此处setcellvalue 中this.execFunctionGroupData会保存想要更新的值,本函数结尾不要设为null,以备后续函数使用
// setcellvalue(origin_r, origin_c, _this.execFunctionGroupData, value);
let cellCache = [[{v:null}]];
setcellvalue(0, 0, cellCache, value);
_this.execFunctionGlobalData[origin_r+"_"+origin_c+"_"+index] = cellCache[0][0];
}
//{ "r": r, "c": c, "index": index, "func": func}
let calcChains = _this.getAllFunctionGroup(),
formulaObjects = {},
stack = [],
count = 0;
let sheets = getluckysheetfile();
let sheetData = {};
for(let i=0;i<sheets.length;i++){
let sheet = sheets[i];
sheetData[sheet.index] = sheet.data;
}
//创建公式缓存及其范围的缓存
console.time("1");
for(let i=0;i<calcChains.length;i++){
let formulaCell = calcChains[i];
let key = "r" + formulaCell.r + "c" + formulaCell.c + "i" + formulaCell.index;
let calc_funcStr = getcellFormula(formulaCell.r, formulaCell.c, formulaCell.index);
let txt1 = calc_funcStr.toUpperCase();
let isOffsetFunc = txt1.indexOf("INDIRECT(")>-1 || txt1.indexOf("OFFSET(")>-1 || txt1.indexOf("INDEX(")>-1;
let formulaArray = [];
if(isOffsetFunc){
this.isFunctionRange(calc_funcStr, null, null, null, null, function(str_nb){
let range = _this.getcellrange($.trim(t), formulaCell.index);
if(range!=null){
formulaArray.push(range);
}
});
}
else{
let formulaTextArray = calc_funcStr.split(/==|!=|<>|<=|>=|[,()=+-\/*%&^><]/g);
for(let i=0;i<formulaTextArray.length;i++){
let t = formulaTextArray[i];
if(t.length<=1){
continue;
}
if(t.substr(0,1)=='"' && t.substr(t.length-1,1)=='"'){
continue;
}
let range = _this.getcellrange($.trim(t), formulaCell.index);
if(range==null){
continue;
}
formulaArray.push(range);
}
}
formulaObjects[key] = formulaArray;
}
console.log(formulaObjects)
console.timeEnd("1");
//计算
for(let i=0;i<calcChains.length;i++){
let formulaCell = calcChains[i];
if (_this.execFunctionExist == null) {
}
else{
}
}
_this.execFunctionExist = null;
},
// When set origin_r and origin_c, that mean just refresh cell value link to [origin_r,origin_c] cell
execFunctionGroup: function(origin_r, origin_c, value, index, data, isForce=false) {
let _this = this;

2
src/index.html

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save