@leankylin-sheet/core 5.2.28 → 5.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/context.d.ts CHANGED
@@ -46,6 +46,14 @@ export type Context = {
46
46
  linkCard?: LinkCardProps;
47
47
  rangeDialog?: RangeDialogProps;
48
48
  warnDialog?: string;
49
+ circularReference?: Array<{
50
+ sheetName: string;
51
+ cellPosition: string;
52
+ formulaContent: string;
53
+ r: number;
54
+ c: number;
55
+ sheetId: string;
56
+ }>;
49
57
  dataVerification?: {
50
58
  selectStatus: boolean;
51
59
  selectRange: [];
package/dist/index.esm.js CHANGED
@@ -10880,6 +10880,12 @@ var en = {
10880
10880
  execfunctionError: "Error in the formula",
10881
10881
  execfunctionSelfError: "The formula cannot refer to its own cell",
10882
10882
  execfunctionSelfErrorResult: "The formula cannot refer to its own cell, which will lead to inaccurate calculation results",
10883
+ execfunctionCircularError: "Circular reference detected. The calculation results may be inaccurate.",
10884
+ circularReferenceTitle: "Circular Reference Error",
10885
+ circularReferenceDescription: "One or more formulas contain a circular reference and may not calculate correctly. A circular reference is any reference within a formula that depends on the result of that same formula.",
10886
+ circularReferenceSheet: "Sheet",
10887
+ circularReferenceCell: "Cell",
10888
+ circularReferenceFormula: "Formula",
10883
10889
  allowRepeatText: "Repeatable",
10884
10890
  allowOptionText: "Optional",
10885
10891
  selectCategory: "Or select a category"
@@ -21461,6 +21467,12 @@ var zh = {
21461
21467
  execfunctionError: '提示", "公式存在错误',
21462
21468
  execfunctionSelfError: "公式不可引用其本身的单元格",
21463
21469
  execfunctionSelfErrorResult: "公式不可引用其本身的单元格,会导致计算结果不准确",
21470
+ execfunctionCircularError: "公式存在相互引用,会导致计算结果不准确",
21471
+ circularReferenceTitle: "循环引用报错",
21472
+ circularReferenceDescription: "一个或多个公式包含循环引用,可能无法正确计算。循环引用是指某个公式内依赖同一公式结果的任何引用。",
21473
+ circularReferenceSheet: "工作表",
21474
+ circularReferenceCell: "单元格",
21475
+ circularReferenceFormula: "公式",
21464
21476
  allowRepeatText: "可重复",
21465
21477
  allowOptionText: "可选",
21466
21478
  selectCategory: "或选择类别"
@@ -31471,6 +31483,12 @@ var es = {
31471
31483
  execfunctionError: "Error en la fórmula",
31472
31484
  execfunctionSelfError: "La fórmula no puede hacer referencia a su propia celda",
31473
31485
  execfunctionSelfErrorResult: "La fórmula no puede hacer referencia a su propia celda, lo que dará lugar a resultados de cálculo inexactos",
31486
+ execfunctionCircularError: "Se ha detectado una referencia circular. Los resultados del cálculo pueden ser inexactos.",
31487
+ circularReferenceTitle: "Error de referencia circular",
31488
+ circularReferenceDescription: "Una o más fórmulas contienen una referencia circular y pueden no calcularse correctamente. Una referencia circular es cualquier referencia dentro de una fórmula que depende del resultado de esa misma fórmula.",
31489
+ circularReferenceSheet: "Hoja",
31490
+ circularReferenceCell: "Celda",
31491
+ circularReferenceFormula: "Fórmula",
31474
31492
  allowRepeatText: "Repetir",
31475
31493
  allowOptionText: "Opción",
31476
31494
  selectCategory: "O selecciona una categoría"
@@ -36129,17 +36147,27 @@ function execfunction(ctx, txt, r, c, id, isrefresh, notInsertFunc) {
36129
36147
  result = _ctx$formulaCache$par.result,
36130
36148
  formulaError = _ctx$formulaCache$par.error;
36131
36149
  if (!_.isNil(r) && !_.isNil(c)) {
36150
+ if (!notInsertFunc) {
36151
+ insertUpdateFunctionGroup(ctx, r, c, id);
36152
+ }
36132
36153
  if (isrefresh) {
36133
36154
  var _data$r;
36134
36155
  var data = getFlowdata(ctx, id);
36135
36156
  var cell = data === null || data === void 0 ? void 0 : (_data$r = data[r]) === null || _data$r === void 0 ? void 0 : _data$r[c];
36136
36157
  if ((cell === null || cell === void 0 ? void 0 : cell.v) != result) {
36158
+ var hadFormulaField = cell && "f" in cell;
36159
+ if (!hadFormulaField && data) {
36160
+ if (!data[r]) data[r] = [];
36161
+ if (!data[r][c]) data[r][c] = {
36162
+ f: txt
36163
+ };else data[r][c].f = txt;
36164
+ }
36137
36165
  execFunctionGroup(ctx, r, c, _.isNil(formulaError) ? result : formulaError, id);
36166
+ if (!hadFormulaField && data && data[r] && data[r][c]) {
36167
+ delete data[r][c].f;
36168
+ }
36138
36169
  }
36139
36170
  }
36140
- if (!notInsertFunc) {
36141
- insertUpdateFunctionGroup(ctx, r, c, id);
36142
- }
36143
36171
  }
36144
36172
  return [true, _.isNil(formulaError) ? result : formulaError, txt];
36145
36173
  }
@@ -36385,6 +36413,68 @@ function execFunctionGroup(ctx, origin_r, origin_c, value, id, data) {
36385
36413
  updateValueArray.push(formulaObject);
36386
36414
  }
36387
36415
  });
36416
+ var visited = {};
36417
+ var inStack = {};
36418
+ var circularNodes = {};
36419
+ function detectCycle(nodeKey) {
36420
+ inStack[nodeKey] = true;
36421
+ visited[nodeKey] = true;
36422
+ var node = formulaObjects[nodeKey];
36423
+ if (!node) return false;
36424
+ var children = Object.keys(node.chidren);
36425
+ for (var _i13 = 0; _i13 < children.length; _i13 += 1) {
36426
+ var childKey = children[_i13];
36427
+ if (inStack[childKey]) {
36428
+ Object.keys(inStack).forEach(function (key) {
36429
+ if (inStack[key]) {
36430
+ circularNodes[key] = true;
36431
+ }
36432
+ });
36433
+ return true;
36434
+ }
36435
+ if (!visited[childKey] && detectCycle(childKey)) {
36436
+ return true;
36437
+ }
36438
+ }
36439
+ inStack[nodeKey] = false;
36440
+ return false;
36441
+ }
36442
+ Object.keys(formulaObjects).every(function (key) {
36443
+ if (!visited[key]) {
36444
+ detectCycle(key);
36445
+ }
36446
+ return true;
36447
+ });
36448
+ if (Object.keys(circularNodes).length > 0) {
36449
+ ctx.circularReference = Object.keys(circularNodes).map(function (key) {
36450
+ var _ctx$luckysheetfile$s;
36451
+ var fObj = formulaObjects[key];
36452
+ var sheetIndex = getSheetIndex(ctx, fObj.id);
36453
+ var sheetName = sheetIndex != null ? ((_ctx$luckysheetfile$s = ctx.luckysheetfile[sheetIndex]) === null || _ctx$luckysheetfile$s === void 0 ? void 0 : _ctx$luckysheetfile$s.name) || '' : '';
36454
+ var cellPosition = indexToColumnChar(fObj.c) + (fObj.r + 1);
36455
+ return {
36456
+ sheetName: sheetName,
36457
+ cellPosition: cellPosition,
36458
+ formulaContent: fObj.calc_funcStr,
36459
+ r: fObj.r,
36460
+ c: fObj.c,
36461
+ sheetId: fObj.id
36462
+ };
36463
+ });
36464
+ Object.keys(circularNodes).forEach(function (key) {
36465
+ var fObj = formulaObjects[key];
36466
+ if (fObj) {
36467
+ ctx.groupValuesRefreshData.push({
36468
+ r: fObj.r,
36469
+ c: fObj.c,
36470
+ v: error.r,
36471
+ f: fObj.calc_funcStr,
36472
+ id: fObj.id
36473
+ });
36474
+ fObj.level = Math.max;
36475
+ }
36476
+ });
36477
+ }
36388
36478
  var formulaRunList = [];
36389
36479
  var stack = updateValueArray;
36390
36480
  var existsFormulaRunList = {};
@@ -36420,8 +36510,8 @@ function execFunctionGroup(ctx, origin_r, origin_c, value, id, data) {
36420
36510
  if (_ret === 0) continue;
36421
36511
  }
36422
36512
  formulaRunList.reverse();
36423
- for (var _i13 = 0; _i13 < formulaRunList.length; _i13 += 1) {
36424
- var formulaCell = formulaRunList[_i13];
36513
+ for (var _i14 = 0; _i14 < formulaRunList.length; _i14 += 1) {
36514
+ var formulaCell = formulaRunList[_i14];
36425
36515
  if (formulaCell.level === Math.max) {
36426
36516
  continue;
36427
36517
  }
@@ -36453,26 +36543,26 @@ function findrangeindex(ctx, v, vp) {
36453
36543
  var vplen = vp_a.length;
36454
36544
  var vlen = v_a.length;
36455
36545
  if (vplen === vlen) {
36456
- var _i14 = pfri[0];
36457
- var p = vp_a[_i14];
36458
- var n = v_a[_i14];
36546
+ var _i15 = pfri[0];
36547
+ var p = vp_a[_i15];
36548
+ var n = v_a[_i15];
36459
36549
  if (_.isNil(p)) {
36460
- if (vp_a.length <= _i14) {
36550
+ if (vp_a.length <= _i15) {
36461
36551
  pfri = [vp_a.length - 1, vp_a.length - 1];
36462
- } else if (v_a.length <= _i14) {
36552
+ } else if (v_a.length <= _i15) {
36463
36553
  pfri = [v_a.length - 1, v_a.length - 1];
36464
36554
  }
36465
36555
  return pfri;
36466
36556
  }
36467
36557
  if (p.length === n.length) {
36468
- if (!_.isNil(vp_a[_i14 + 1]) && !_.isNil(v_a[_i14 + 1]) && vp_a[_i14 + 1].length < v_a[_i14 + 1].length) {
36558
+ if (!_.isNil(vp_a[_i15 + 1]) && !_.isNil(v_a[_i15 + 1]) && vp_a[_i15 + 1].length < v_a[_i15 + 1].length) {
36469
36559
  pfri[0] += 1;
36470
36560
  pfri[1] = 1;
36471
36561
  }
36472
36562
  return pfri;
36473
36563
  }
36474
36564
  if (p.length > n.length) {
36475
- if (!_.isNil(p) && !_.isNil(v_a[_i14 + 1]) && v_a[_i14 + 1].substring(0, 1) === '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
36565
+ if (!_.isNil(p) && !_.isNil(v_a[_i15 + 1]) && v_a[_i15 + 1].substring(0, 1) === '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
36476
36566
  pfri[0] += 1;
36477
36567
  pfri[1] = 1;
36478
36568
  }
@@ -36485,34 +36575,34 @@ function findrangeindex(ctx, v, vp) {
36485
36575
  return pfri;
36486
36576
  }
36487
36577
  } else if (vplen > vlen) {
36488
- var _i15 = pfri[0];
36489
- var _p = vp_a[_i15];
36490
- var _n = v_a[_i15];
36578
+ var _i16 = pfri[0];
36579
+ var _p = vp_a[_i16];
36580
+ var _n = v_a[_i16];
36491
36581
  if (_.isNil(_n)) {
36492
- if (v_a[_i15 - 1].indexOf("{") > -1) {
36582
+ if (v_a[_i16 - 1].indexOf("{") > -1) {
36493
36583
  pfri[0] -= 1;
36494
- var start = v_a[_i15 - 1].search("{");
36584
+ var start = v_a[_i16 - 1].search("{");
36495
36585
  pfri[1] += start;
36496
36586
  } else {
36497
36587
  pfri[0] = 0;
36498
36588
  pfri[1] = 0;
36499
36589
  }
36500
36590
  } else if (_p.length === _n.length) {
36501
- if (!_.isNil(v_a[_i15 + 1]) && (v_a[_i15 + 1].substring(0, 1) === '"' || v_a[_i15 + 1].substring(0, 1) === "{" || v_a[_i15 + 1].substring(0, 1) === "}")) {
36591
+ if (!_.isNil(v_a[_i16 + 1]) && (v_a[_i16 + 1].substring(0, 1) === '"' || v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36502
36592
  pfri[0] += 1;
36503
36593
  pfri[1] = 1;
36504
- } else if (!_.isNil(_p) && _p.length > 2 && _p.substring(0, 1) === '"' && _p.substring(_p.length - 1, 1) === '"') ; else if (!_.isNil(v_a[_i15]) && v_a[_i15] === '")') {
36594
+ } else if (!_.isNil(_p) && _p.length > 2 && _p.substring(0, 1) === '"' && _p.substring(_p.length - 1, 1) === '"') ; else if (!_.isNil(v_a[_i16]) && v_a[_i16] === '")') {
36505
36595
  pfri[1] = 1;
36506
- } else if (!_.isNil(v_a[_i15]) && v_a[_i15] === '"}') {
36596
+ } else if (!_.isNil(v_a[_i16]) && v_a[_i16] === '"}') {
36507
36597
  pfri[1] = 1;
36508
- } else if (!_.isNil(v_a[_i15]) && v_a[_i15] === "{)") {
36598
+ } else if (!_.isNil(v_a[_i16]) && v_a[_i16] === "{)") {
36509
36599
  pfri[1] = 1;
36510
36600
  } else {
36511
36601
  pfri[1] = _n.length;
36512
36602
  }
36513
36603
  return pfri;
36514
36604
  } else if (_p.length > _n.length) {
36515
- if (!_.isNil(v_a[_i15 + 1]) && (v_a[_i15 + 1].substring(0, 1) === '"' || v_a[_i15 + 1].substring(0, 1) === "{" || v_a[_i15 + 1].substring(0, 1) === "}")) {
36605
+ if (!_.isNil(v_a[_i16 + 1]) && (v_a[_i16 + 1].substring(0, 1) === '"' || v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36516
36606
  pfri[0] += 1;
36517
36607
  pfri[1] = 1;
36518
36608
  }
@@ -36522,9 +36612,9 @@ function findrangeindex(ctx, v, vp) {
36522
36612
  }
36523
36613
  return pfri;
36524
36614
  } else if (vplen < vlen) {
36525
- var _i16 = pfri[0];
36526
- var _p2 = vp_a[_i16];
36527
- var _n2 = v_a[_i16];
36615
+ var _i17 = pfri[0];
36616
+ var _p2 = vp_a[_i17];
36617
+ var _n2 = v_a[_i17];
36528
36618
  if (_.isNil(_p2)) {
36529
36619
  pfri[0] = v_a.length - 1;
36530
36620
  if (!_.isNil(_n2)) {
@@ -36533,9 +36623,9 @@ function findrangeindex(ctx, v, vp) {
36533
36623
  pfri[1] = 1;
36534
36624
  }
36535
36625
  } else if (_p2.length === _n2.length) {
36536
- if (vp_a[_i16 + 1] != null && (vp_a[_i16 + 1].substring(0, 1) === '"' || vp_a[_i16 + 1].substring(0, 1) === "{" || vp_a[_i16 + 1].substring(0, 1) === "}")) {
36626
+ if (vp_a[_i17 + 1] != null && (vp_a[_i17 + 1].substring(0, 1) === '"' || vp_a[_i17 + 1].substring(0, 1) === "{" || vp_a[_i17 + 1].substring(0, 1) === "}")) {
36537
36627
  pfri[1] = _n2.length;
36538
- } else if (!_.isNil(v_a[_i16 + 1]) && v_a[_i16 + 1].substring(0, 1) === '"' && (v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36628
+ } else if (!_.isNil(v_a[_i17 + 1]) && v_a[_i17 + 1].substring(0, 1) === '"' && (v_a[_i17 + 1].substring(0, 1) === "{" || v_a[_i17 + 1].substring(0, 1) === "}")) {
36539
36629
  pfri[0] += 1;
36540
36630
  pfri[1] = 1;
36541
36631
  } else if (!_.isNil(_n2) && _n2.substring(0, 1) === '"' && _n2.substring(_n2.length - 1, 1) === '"' && _p2.substring(0, 1) === '"' && _p2.substring(_p2.length - 1, 1) === ")") {
@@ -36545,7 +36635,7 @@ function findrangeindex(ctx, v, vp) {
36545
36635
  } else {
36546
36636
  pfri[0] = pfri[0] + vlen - vplen;
36547
36637
  if (v_a.length > vp_a.length) {
36548
- pfri[1] = v_a[_i16 + 1].length;
36638
+ pfri[1] = v_a[_i17 + 1].length;
36549
36639
  } else {
36550
36640
  pfri[1] = 1;
36551
36641
  }
@@ -36554,17 +36644,17 @@ function findrangeindex(ctx, v, vp) {
36554
36644
  } else if (_p2.length > _n2.length) {
36555
36645
  if (!_.isNil(_p2) && _p2.substring(0, 1) === '"') {
36556
36646
  pfri[1] = _n2.length;
36557
- } else if (_.isNil(v_a[_i16 + 1]) && /{.*?}/.test(v_a[_i16 + 1])) {
36647
+ } else if (_.isNil(v_a[_i17 + 1]) && /{.*?}/.test(v_a[_i17 + 1])) {
36558
36648
  pfri[0] += 1;
36559
- pfri[1] = v_a[_i16 + 1].length;
36560
- } else if (!_.isNil(_p2) && v_a[_i16 + 1].substring(0, 1) === '"' && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) {
36649
+ pfri[1] = v_a[_i17 + 1].length;
36650
+ } else if (!_.isNil(_p2) && v_a[_i17 + 1].substring(0, 1) === '"' && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) {
36561
36651
  pfri[0] += 1;
36562
36652
  pfri[1] = 1;
36563
36653
  } else if (!_.isNil(_p2) && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) ; else if (!_.isNil(_p2) && !_.startsWith(_p2[0], "=") && _.startsWith(_n2, "=")) {
36564
36654
  return [vlen - 1, v_a[vlen - 1].length];
36565
36655
  } else {
36566
36656
  pfri[0] = pfri[0] + vlen - vplen - 1;
36567
- pfri[1] = v_a[(_i16 || 1) - 1].length;
36657
+ pfri[1] = v_a[(_i17 || 1) - 1].length;
36568
36658
  }
36569
36659
  return pfri;
36570
36660
  } else if (_p2.length < _n2.length) {
@@ -36638,8 +36728,8 @@ function searchFunction(ctx, searchtxt) {
36638
36728
  var f = [];
36639
36729
  var s = [];
36640
36730
  var t = [];
36641
- for (var _i17 = 0; _i17 < functionlist.length; _i17 += 1) {
36642
- var item = functionlist[_i17];
36731
+ for (var _i18 = 0; _i18 < functionlist.length; _i18 += 1) {
36732
+ var item = functionlist[_i18];
36643
36733
  var n = item.n;
36644
36734
  if (n === searchtxt) {
36645
36735
  f.unshift(item);
@@ -36695,8 +36785,8 @@ function helpFunctionExe($editer, currSelection, ctx) {
36695
36785
  var _locale2 = locale(ctx),
36696
36786
  functionlist = _locale2.functionlist;
36697
36787
  if (_.isEmpty(ctx.formulaCache.functionlistMap)) {
36698
- for (var _i18 = 0; _i18 < functionlist.length; _i18 += 1) {
36699
- ctx.formulaCache.functionlistMap[functionlist[_i18].n] = functionlist[_i18];
36788
+ for (var _i19 = 0; _i19 < functionlist.length; _i19 += 1) {
36789
+ ctx.formulaCache.functionlistMap[functionlist[_i19].n] = functionlist[_i19];
36700
36790
  }
36701
36791
  }
36702
36792
  if (!currSelection) {
@@ -37346,7 +37436,6 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
37346
37436
  var span = $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']"));
37347
37437
  if (span) {
37348
37438
  span.innerHTML = range;
37349
- console.log(333312);
37350
37439
  setCaretPosition(ctx, span, 0, range.length);
37351
37440
  }
37352
37441
  } else if (ctx.active_f) {
package/dist/index.js CHANGED
@@ -10890,6 +10890,12 @@ var en = {
10890
10890
  execfunctionError: "Error in the formula",
10891
10891
  execfunctionSelfError: "The formula cannot refer to its own cell",
10892
10892
  execfunctionSelfErrorResult: "The formula cannot refer to its own cell, which will lead to inaccurate calculation results",
10893
+ execfunctionCircularError: "Circular reference detected. The calculation results may be inaccurate.",
10894
+ circularReferenceTitle: "Circular Reference Error",
10895
+ circularReferenceDescription: "One or more formulas contain a circular reference and may not calculate correctly. A circular reference is any reference within a formula that depends on the result of that same formula.",
10896
+ circularReferenceSheet: "Sheet",
10897
+ circularReferenceCell: "Cell",
10898
+ circularReferenceFormula: "Formula",
10893
10899
  allowRepeatText: "Repeatable",
10894
10900
  allowOptionText: "Optional",
10895
10901
  selectCategory: "Or select a category"
@@ -21471,6 +21477,12 @@ var zh = {
21471
21477
  execfunctionError: '提示", "公式存在错误',
21472
21478
  execfunctionSelfError: "公式不可引用其本身的单元格",
21473
21479
  execfunctionSelfErrorResult: "公式不可引用其本身的单元格,会导致计算结果不准确",
21480
+ execfunctionCircularError: "公式存在相互引用,会导致计算结果不准确",
21481
+ circularReferenceTitle: "循环引用报错",
21482
+ circularReferenceDescription: "一个或多个公式包含循环引用,可能无法正确计算。循环引用是指某个公式内依赖同一公式结果的任何引用。",
21483
+ circularReferenceSheet: "工作表",
21484
+ circularReferenceCell: "单元格",
21485
+ circularReferenceFormula: "公式",
21474
21486
  allowRepeatText: "可重复",
21475
21487
  allowOptionText: "可选",
21476
21488
  selectCategory: "或选择类别"
@@ -31481,6 +31493,12 @@ var es = {
31481
31493
  execfunctionError: "Error en la fórmula",
31482
31494
  execfunctionSelfError: "La fórmula no puede hacer referencia a su propia celda",
31483
31495
  execfunctionSelfErrorResult: "La fórmula no puede hacer referencia a su propia celda, lo que dará lugar a resultados de cálculo inexactos",
31496
+ execfunctionCircularError: "Se ha detectado una referencia circular. Los resultados del cálculo pueden ser inexactos.",
31497
+ circularReferenceTitle: "Error de referencia circular",
31498
+ circularReferenceDescription: "Una o más fórmulas contienen una referencia circular y pueden no calcularse correctamente. Una referencia circular es cualquier referencia dentro de una fórmula que depende del resultado de esa misma fórmula.",
31499
+ circularReferenceSheet: "Hoja",
31500
+ circularReferenceCell: "Celda",
31501
+ circularReferenceFormula: "Fórmula",
31484
31502
  allowRepeatText: "Repetir",
31485
31503
  allowOptionText: "Opción",
31486
31504
  selectCategory: "O selecciona una categoría"
@@ -36139,17 +36157,27 @@ function execfunction(ctx, txt, r, c, id, isrefresh, notInsertFunc) {
36139
36157
  result = _ctx$formulaCache$par.result,
36140
36158
  formulaError = _ctx$formulaCache$par.error;
36141
36159
  if (!___default['default'].isNil(r) && !___default['default'].isNil(c)) {
36160
+ if (!notInsertFunc) {
36161
+ insertUpdateFunctionGroup(ctx, r, c, id);
36162
+ }
36142
36163
  if (isrefresh) {
36143
36164
  var _data$r;
36144
36165
  var data = getFlowdata(ctx, id);
36145
36166
  var cell = data === null || data === void 0 ? void 0 : (_data$r = data[r]) === null || _data$r === void 0 ? void 0 : _data$r[c];
36146
36167
  if ((cell === null || cell === void 0 ? void 0 : cell.v) != result) {
36168
+ var hadFormulaField = cell && "f" in cell;
36169
+ if (!hadFormulaField && data) {
36170
+ if (!data[r]) data[r] = [];
36171
+ if (!data[r][c]) data[r][c] = {
36172
+ f: txt
36173
+ };else data[r][c].f = txt;
36174
+ }
36147
36175
  execFunctionGroup(ctx, r, c, ___default['default'].isNil(formulaError) ? result : formulaError, id);
36176
+ if (!hadFormulaField && data && data[r] && data[r][c]) {
36177
+ delete data[r][c].f;
36178
+ }
36148
36179
  }
36149
36180
  }
36150
- if (!notInsertFunc) {
36151
- insertUpdateFunctionGroup(ctx, r, c, id);
36152
- }
36153
36181
  }
36154
36182
  return [true, ___default['default'].isNil(formulaError) ? result : formulaError, txt];
36155
36183
  }
@@ -36395,6 +36423,68 @@ function execFunctionGroup(ctx, origin_r, origin_c, value, id, data) {
36395
36423
  updateValueArray.push(formulaObject);
36396
36424
  }
36397
36425
  });
36426
+ var visited = {};
36427
+ var inStack = {};
36428
+ var circularNodes = {};
36429
+ function detectCycle(nodeKey) {
36430
+ inStack[nodeKey] = true;
36431
+ visited[nodeKey] = true;
36432
+ var node = formulaObjects[nodeKey];
36433
+ if (!node) return false;
36434
+ var children = Object.keys(node.chidren);
36435
+ for (var _i13 = 0; _i13 < children.length; _i13 += 1) {
36436
+ var childKey = children[_i13];
36437
+ if (inStack[childKey]) {
36438
+ Object.keys(inStack).forEach(function (key) {
36439
+ if (inStack[key]) {
36440
+ circularNodes[key] = true;
36441
+ }
36442
+ });
36443
+ return true;
36444
+ }
36445
+ if (!visited[childKey] && detectCycle(childKey)) {
36446
+ return true;
36447
+ }
36448
+ }
36449
+ inStack[nodeKey] = false;
36450
+ return false;
36451
+ }
36452
+ Object.keys(formulaObjects).every(function (key) {
36453
+ if (!visited[key]) {
36454
+ detectCycle(key);
36455
+ }
36456
+ return true;
36457
+ });
36458
+ if (Object.keys(circularNodes).length > 0) {
36459
+ ctx.circularReference = Object.keys(circularNodes).map(function (key) {
36460
+ var _ctx$luckysheetfile$s;
36461
+ var fObj = formulaObjects[key];
36462
+ var sheetIndex = getSheetIndex(ctx, fObj.id);
36463
+ var sheetName = sheetIndex != null ? ((_ctx$luckysheetfile$s = ctx.luckysheetfile[sheetIndex]) === null || _ctx$luckysheetfile$s === void 0 ? void 0 : _ctx$luckysheetfile$s.name) || '' : '';
36464
+ var cellPosition = indexToColumnChar(fObj.c) + (fObj.r + 1);
36465
+ return {
36466
+ sheetName: sheetName,
36467
+ cellPosition: cellPosition,
36468
+ formulaContent: fObj.calc_funcStr,
36469
+ r: fObj.r,
36470
+ c: fObj.c,
36471
+ sheetId: fObj.id
36472
+ };
36473
+ });
36474
+ Object.keys(circularNodes).forEach(function (key) {
36475
+ var fObj = formulaObjects[key];
36476
+ if (fObj) {
36477
+ ctx.groupValuesRefreshData.push({
36478
+ r: fObj.r,
36479
+ c: fObj.c,
36480
+ v: error.r,
36481
+ f: fObj.calc_funcStr,
36482
+ id: fObj.id
36483
+ });
36484
+ fObj.level = Math.max;
36485
+ }
36486
+ });
36487
+ }
36398
36488
  var formulaRunList = [];
36399
36489
  var stack = updateValueArray;
36400
36490
  var existsFormulaRunList = {};
@@ -36430,8 +36520,8 @@ function execFunctionGroup(ctx, origin_r, origin_c, value, id, data) {
36430
36520
  if (_ret === 0) continue;
36431
36521
  }
36432
36522
  formulaRunList.reverse();
36433
- for (var _i13 = 0; _i13 < formulaRunList.length; _i13 += 1) {
36434
- var formulaCell = formulaRunList[_i13];
36523
+ for (var _i14 = 0; _i14 < formulaRunList.length; _i14 += 1) {
36524
+ var formulaCell = formulaRunList[_i14];
36435
36525
  if (formulaCell.level === Math.max) {
36436
36526
  continue;
36437
36527
  }
@@ -36463,26 +36553,26 @@ function findrangeindex(ctx, v, vp) {
36463
36553
  var vplen = vp_a.length;
36464
36554
  var vlen = v_a.length;
36465
36555
  if (vplen === vlen) {
36466
- var _i14 = pfri[0];
36467
- var p = vp_a[_i14];
36468
- var n = v_a[_i14];
36556
+ var _i15 = pfri[0];
36557
+ var p = vp_a[_i15];
36558
+ var n = v_a[_i15];
36469
36559
  if (___default['default'].isNil(p)) {
36470
- if (vp_a.length <= _i14) {
36560
+ if (vp_a.length <= _i15) {
36471
36561
  pfri = [vp_a.length - 1, vp_a.length - 1];
36472
- } else if (v_a.length <= _i14) {
36562
+ } else if (v_a.length <= _i15) {
36473
36563
  pfri = [v_a.length - 1, v_a.length - 1];
36474
36564
  }
36475
36565
  return pfri;
36476
36566
  }
36477
36567
  if (p.length === n.length) {
36478
- if (!___default['default'].isNil(vp_a[_i14 + 1]) && !___default['default'].isNil(v_a[_i14 + 1]) && vp_a[_i14 + 1].length < v_a[_i14 + 1].length) {
36568
+ if (!___default['default'].isNil(vp_a[_i15 + 1]) && !___default['default'].isNil(v_a[_i15 + 1]) && vp_a[_i15 + 1].length < v_a[_i15 + 1].length) {
36479
36569
  pfri[0] += 1;
36480
36570
  pfri[1] = 1;
36481
36571
  }
36482
36572
  return pfri;
36483
36573
  }
36484
36574
  if (p.length > n.length) {
36485
- if (!___default['default'].isNil(p) && !___default['default'].isNil(v_a[_i14 + 1]) && v_a[_i14 + 1].substring(0, 1) === '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
36575
+ if (!___default['default'].isNil(p) && !___default['default'].isNil(v_a[_i15 + 1]) && v_a[_i15 + 1].substring(0, 1) === '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
36486
36576
  pfri[0] += 1;
36487
36577
  pfri[1] = 1;
36488
36578
  }
@@ -36495,34 +36585,34 @@ function findrangeindex(ctx, v, vp) {
36495
36585
  return pfri;
36496
36586
  }
36497
36587
  } else if (vplen > vlen) {
36498
- var _i15 = pfri[0];
36499
- var _p = vp_a[_i15];
36500
- var _n = v_a[_i15];
36588
+ var _i16 = pfri[0];
36589
+ var _p = vp_a[_i16];
36590
+ var _n = v_a[_i16];
36501
36591
  if (___default['default'].isNil(_n)) {
36502
- if (v_a[_i15 - 1].indexOf("{") > -1) {
36592
+ if (v_a[_i16 - 1].indexOf("{") > -1) {
36503
36593
  pfri[0] -= 1;
36504
- var start = v_a[_i15 - 1].search("{");
36594
+ var start = v_a[_i16 - 1].search("{");
36505
36595
  pfri[1] += start;
36506
36596
  } else {
36507
36597
  pfri[0] = 0;
36508
36598
  pfri[1] = 0;
36509
36599
  }
36510
36600
  } else if (_p.length === _n.length) {
36511
- if (!___default['default'].isNil(v_a[_i15 + 1]) && (v_a[_i15 + 1].substring(0, 1) === '"' || v_a[_i15 + 1].substring(0, 1) === "{" || v_a[_i15 + 1].substring(0, 1) === "}")) {
36601
+ if (!___default['default'].isNil(v_a[_i16 + 1]) && (v_a[_i16 + 1].substring(0, 1) === '"' || v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36512
36602
  pfri[0] += 1;
36513
36603
  pfri[1] = 1;
36514
- } else if (!___default['default'].isNil(_p) && _p.length > 2 && _p.substring(0, 1) === '"' && _p.substring(_p.length - 1, 1) === '"') ; else if (!___default['default'].isNil(v_a[_i15]) && v_a[_i15] === '")') {
36604
+ } else if (!___default['default'].isNil(_p) && _p.length > 2 && _p.substring(0, 1) === '"' && _p.substring(_p.length - 1, 1) === '"') ; else if (!___default['default'].isNil(v_a[_i16]) && v_a[_i16] === '")') {
36515
36605
  pfri[1] = 1;
36516
- } else if (!___default['default'].isNil(v_a[_i15]) && v_a[_i15] === '"}') {
36606
+ } else if (!___default['default'].isNil(v_a[_i16]) && v_a[_i16] === '"}') {
36517
36607
  pfri[1] = 1;
36518
- } else if (!___default['default'].isNil(v_a[_i15]) && v_a[_i15] === "{)") {
36608
+ } else if (!___default['default'].isNil(v_a[_i16]) && v_a[_i16] === "{)") {
36519
36609
  pfri[1] = 1;
36520
36610
  } else {
36521
36611
  pfri[1] = _n.length;
36522
36612
  }
36523
36613
  return pfri;
36524
36614
  } else if (_p.length > _n.length) {
36525
- if (!___default['default'].isNil(v_a[_i15 + 1]) && (v_a[_i15 + 1].substring(0, 1) === '"' || v_a[_i15 + 1].substring(0, 1) === "{" || v_a[_i15 + 1].substring(0, 1) === "}")) {
36615
+ if (!___default['default'].isNil(v_a[_i16 + 1]) && (v_a[_i16 + 1].substring(0, 1) === '"' || v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36526
36616
  pfri[0] += 1;
36527
36617
  pfri[1] = 1;
36528
36618
  }
@@ -36532,9 +36622,9 @@ function findrangeindex(ctx, v, vp) {
36532
36622
  }
36533
36623
  return pfri;
36534
36624
  } else if (vplen < vlen) {
36535
- var _i16 = pfri[0];
36536
- var _p2 = vp_a[_i16];
36537
- var _n2 = v_a[_i16];
36625
+ var _i17 = pfri[0];
36626
+ var _p2 = vp_a[_i17];
36627
+ var _n2 = v_a[_i17];
36538
36628
  if (___default['default'].isNil(_p2)) {
36539
36629
  pfri[0] = v_a.length - 1;
36540
36630
  if (!___default['default'].isNil(_n2)) {
@@ -36543,9 +36633,9 @@ function findrangeindex(ctx, v, vp) {
36543
36633
  pfri[1] = 1;
36544
36634
  }
36545
36635
  } else if (_p2.length === _n2.length) {
36546
- if (vp_a[_i16 + 1] != null && (vp_a[_i16 + 1].substring(0, 1) === '"' || vp_a[_i16 + 1].substring(0, 1) === "{" || vp_a[_i16 + 1].substring(0, 1) === "}")) {
36636
+ if (vp_a[_i17 + 1] != null && (vp_a[_i17 + 1].substring(0, 1) === '"' || vp_a[_i17 + 1].substring(0, 1) === "{" || vp_a[_i17 + 1].substring(0, 1) === "}")) {
36547
36637
  pfri[1] = _n2.length;
36548
- } else if (!___default['default'].isNil(v_a[_i16 + 1]) && v_a[_i16 + 1].substring(0, 1) === '"' && (v_a[_i16 + 1].substring(0, 1) === "{" || v_a[_i16 + 1].substring(0, 1) === "}")) {
36638
+ } else if (!___default['default'].isNil(v_a[_i17 + 1]) && v_a[_i17 + 1].substring(0, 1) === '"' && (v_a[_i17 + 1].substring(0, 1) === "{" || v_a[_i17 + 1].substring(0, 1) === "}")) {
36549
36639
  pfri[0] += 1;
36550
36640
  pfri[1] = 1;
36551
36641
  } else if (!___default['default'].isNil(_n2) && _n2.substring(0, 1) === '"' && _n2.substring(_n2.length - 1, 1) === '"' && _p2.substring(0, 1) === '"' && _p2.substring(_p2.length - 1, 1) === ")") {
@@ -36555,7 +36645,7 @@ function findrangeindex(ctx, v, vp) {
36555
36645
  } else {
36556
36646
  pfri[0] = pfri[0] + vlen - vplen;
36557
36647
  if (v_a.length > vp_a.length) {
36558
- pfri[1] = v_a[_i16 + 1].length;
36648
+ pfri[1] = v_a[_i17 + 1].length;
36559
36649
  } else {
36560
36650
  pfri[1] = 1;
36561
36651
  }
@@ -36564,17 +36654,17 @@ function findrangeindex(ctx, v, vp) {
36564
36654
  } else if (_p2.length > _n2.length) {
36565
36655
  if (!___default['default'].isNil(_p2) && _p2.substring(0, 1) === '"') {
36566
36656
  pfri[1] = _n2.length;
36567
- } else if (___default['default'].isNil(v_a[_i16 + 1]) && /{.*?}/.test(v_a[_i16 + 1])) {
36657
+ } else if (___default['default'].isNil(v_a[_i17 + 1]) && /{.*?}/.test(v_a[_i17 + 1])) {
36568
36658
  pfri[0] += 1;
36569
- pfri[1] = v_a[_i16 + 1].length;
36570
- } else if (!___default['default'].isNil(_p2) && v_a[_i16 + 1].substring(0, 1) === '"' && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) {
36659
+ pfri[1] = v_a[_i17 + 1].length;
36660
+ } else if (!___default['default'].isNil(_p2) && v_a[_i17 + 1].substring(0, 1) === '"' && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) {
36571
36661
  pfri[0] += 1;
36572
36662
  pfri[1] = 1;
36573
36663
  } else if (!___default['default'].isNil(_p2) && (_p2.indexOf("{") > -1 || _p2.indexOf("}") > -1)) ; else if (!___default['default'].isNil(_p2) && !___default['default'].startsWith(_p2[0], "=") && ___default['default'].startsWith(_n2, "=")) {
36574
36664
  return [vlen - 1, v_a[vlen - 1].length];
36575
36665
  } else {
36576
36666
  pfri[0] = pfri[0] + vlen - vplen - 1;
36577
- pfri[1] = v_a[(_i16 || 1) - 1].length;
36667
+ pfri[1] = v_a[(_i17 || 1) - 1].length;
36578
36668
  }
36579
36669
  return pfri;
36580
36670
  } else if (_p2.length < _n2.length) {
@@ -36648,8 +36738,8 @@ function searchFunction(ctx, searchtxt) {
36648
36738
  var f = [];
36649
36739
  var s = [];
36650
36740
  var t = [];
36651
- for (var _i17 = 0; _i17 < functionlist.length; _i17 += 1) {
36652
- var item = functionlist[_i17];
36741
+ for (var _i18 = 0; _i18 < functionlist.length; _i18 += 1) {
36742
+ var item = functionlist[_i18];
36653
36743
  var n = item.n;
36654
36744
  if (n === searchtxt) {
36655
36745
  f.unshift(item);
@@ -36705,8 +36795,8 @@ function helpFunctionExe($editer, currSelection, ctx) {
36705
36795
  var _locale2 = locale(ctx),
36706
36796
  functionlist = _locale2.functionlist;
36707
36797
  if (___default['default'].isEmpty(ctx.formulaCache.functionlistMap)) {
36708
- for (var _i18 = 0; _i18 < functionlist.length; _i18 += 1) {
36709
- ctx.formulaCache.functionlistMap[functionlist[_i18].n] = functionlist[_i18];
36798
+ for (var _i19 = 0; _i19 < functionlist.length; _i19 += 1) {
36799
+ ctx.formulaCache.functionlistMap[functionlist[_i19].n] = functionlist[_i19];
36710
36800
  }
36711
36801
  }
36712
36802
  if (!currSelection) {
@@ -37356,7 +37446,6 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
37356
37446
  var span = $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']"));
37357
37447
  if (span) {
37358
37448
  span.innerHTML = range;
37359
- console.log(333312);
37360
37449
  setCaretPosition(ctx, span, 0, range.length);
37361
37450
  }
37362
37451
  } else if (ctx.active_f) {
@@ -870,6 +870,12 @@ declare const _default: {
870
870
  execfunctionError: string;
871
871
  execfunctionSelfError: string;
872
872
  execfunctionSelfErrorResult: string;
873
+ execfunctionCircularError: string;
874
+ circularReferenceTitle: string;
875
+ circularReferenceDescription: string;
876
+ circularReferenceSheet: string;
877
+ circularReferenceCell: string;
878
+ circularReferenceFormula: string;
873
879
  allowRepeatText: string;
874
880
  allowOptionText: string;
875
881
  selectCategory: string;
@@ -974,6 +974,12 @@ declare const _default: {
974
974
  execfunctionError: string;
975
975
  execfunctionSelfError: string;
976
976
  execfunctionSelfErrorResult: string;
977
+ execfunctionCircularError: string;
978
+ circularReferenceTitle: string;
979
+ circularReferenceDescription: string;
980
+ circularReferenceSheet: string;
981
+ circularReferenceCell: string;
982
+ circularReferenceFormula: string;
977
983
  allowRepeatText: string;
978
984
  allowOptionText: string;
979
985
  selectCategory: string;
@@ -889,6 +889,12 @@ declare function locale(ctx: Context): {
889
889
  execfunctionError: string;
890
890
  execfunctionSelfError: string;
891
891
  execfunctionSelfErrorResult: string;
892
+ execfunctionCircularError: string;
893
+ circularReferenceTitle: string;
894
+ circularReferenceDescription: string;
895
+ circularReferenceSheet: string;
896
+ circularReferenceCell: string;
897
+ circularReferenceFormula: string;
892
898
  allowRepeatText: string;
893
899
  allowOptionText: string;
894
900
  selectCategory: string;
@@ -888,6 +888,12 @@ declare const _default: {
888
888
  execfunctionError: string;
889
889
  execfunctionSelfError: string;
890
890
  execfunctionSelfErrorResult: string;
891
+ execfunctionCircularError: string;
892
+ circularReferenceTitle: string;
893
+ circularReferenceDescription: string;
894
+ circularReferenceSheet: string;
895
+ circularReferenceCell: string;
896
+ circularReferenceFormula: string;
891
897
  allowRepeatText: string;
892
898
  allowOptionText: string;
893
899
  selectCategory: string;
@@ -1028,6 +1028,12 @@ declare const _default: {
1028
1028
  execfunctionError: string;
1029
1029
  execfunctionSelfError: string;
1030
1030
  execfunctionSelfErrorResult: string;
1031
+ execfunctionCircularError: string;
1032
+ circularReferenceTitle: string;
1033
+ circularReferenceDescription: string;
1034
+ circularReferenceSheet: string;
1035
+ circularReferenceCell: string;
1036
+ circularReferenceFormula: string;
1031
1037
  allowRepeatText: string;
1032
1038
  allowOptionText: string;
1033
1039
  selectCategory: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leankylin-sheet/core",
3
- "version": "5.2.28",
3
+ "version": "5.2.30",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "typings": "dist/index.d.ts",
@@ -13,7 +13,7 @@
13
13
  "build": "father-build"
14
14
  },
15
15
  "dependencies": {
16
- "@leankylin-sheet/formula-parser": "5.2.28",
16
+ "@leankylin-sheet/formula-parser": "5.2.30",
17
17
  "dayjs": "^1.11.0",
18
18
  "immer": "^9.0.12",
19
19
  "lodash": "^4.17.21",