@devmm/puredocs-excel-formula 1.1.0 → 1.1.2
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/index.cjs +39 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +39 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -282,7 +282,7 @@ var _FormulaValue = class _FormulaValue {
|
|
|
282
282
|
if (value2 === null || value2 === void 0) return _FormulaValue.blank;
|
|
283
283
|
if (typeof value2 === "number") return isNaN(value2) ? _FormulaValue.errorValue : _FormulaValue.number(value2);
|
|
284
284
|
if (typeof value2 === "boolean") return _FormulaValue.boolean(value2);
|
|
285
|
-
if (typeof value2 === "string") return
|
|
285
|
+
if (typeof value2 === "string") return _FormulaValue.text(value2);
|
|
286
286
|
if (value2 instanceof Date) {
|
|
287
287
|
return _FormulaValue.number(puredocsExcel.toOADate(value2));
|
|
288
288
|
}
|
|
@@ -1820,11 +1820,14 @@ function count(a, c) {
|
|
|
1820
1820
|
function countA(a, c) {
|
|
1821
1821
|
return FormulaValue.number(exports.FormulaHelper.flattenArgs(a, c).filter((v) => !v.isBlank).length);
|
|
1822
1822
|
}
|
|
1823
|
+
function isCountBlank(v) {
|
|
1824
|
+
return v.isBlank || v.isText && v.textValue === "";
|
|
1825
|
+
}
|
|
1823
1826
|
function countBlank(a, c) {
|
|
1824
1827
|
const v = a[0].evaluate(c);
|
|
1825
|
-
if (!v.isArray) return FormulaValue.number(v
|
|
1828
|
+
if (!v.isArray) return FormulaValue.number(isCountBlank(v) ? 1 : 0);
|
|
1826
1829
|
let n = 0;
|
|
1827
|
-
for (const item of v.arrayVal.values()) if (item
|
|
1830
|
+
for (const item of v.arrayVal.values()) if (isCountBlank(item)) n++;
|
|
1828
1831
|
return FormulaValue.number(n);
|
|
1829
1832
|
}
|
|
1830
1833
|
function countIf(a, c) {
|
|
@@ -1832,11 +1835,12 @@ function countIf(a, c) {
|
|
|
1832
1835
|
if (range.isError) return range;
|
|
1833
1836
|
const crit = a[1].evaluate(c);
|
|
1834
1837
|
if (crit.isError) return crit;
|
|
1835
|
-
const
|
|
1836
|
-
if (!range.isArray) return FormulaValue.number(
|
|
1838
|
+
const compiled = exports.FormulaHelper.compileCriteria(crit.asText());
|
|
1839
|
+
if (!range.isArray) return FormulaValue.number(compiled.test(range) ? 1 : 0);
|
|
1840
|
+
const countBlanks = compiled.kind === "blankness";
|
|
1837
1841
|
let n = 0;
|
|
1838
1842
|
for (const item of range.arrayVal.values()) {
|
|
1839
|
-
if (!item.isBlank &&
|
|
1843
|
+
if ((countBlanks || !item.isBlank) && compiled.test(item)) n++;
|
|
1840
1844
|
}
|
|
1841
1845
|
return FormulaValue.number(n);
|
|
1842
1846
|
}
|
|
@@ -2813,6 +2817,8 @@ function registerLookup(r) {
|
|
|
2813
2817
|
r.register("COLUMNS", columns, 1, 1);
|
|
2814
2818
|
r.register("OFFSET", offset, 3, 5, true);
|
|
2815
2819
|
r.register("INDIRECT", indirect, 1, 2, true);
|
|
2820
|
+
r.register("ANCHORARRAY", anchorArray, 1, 1);
|
|
2821
|
+
r.register("SINGLE", single, 1, 1);
|
|
2816
2822
|
}
|
|
2817
2823
|
function num2(a, c, i) {
|
|
2818
2824
|
const r = exports.FormulaHelper.evalDouble(a[i], c);
|
|
@@ -3260,6 +3266,15 @@ function offset(a, c) {
|
|
|
3260
3266
|
puredocsExcel.cellRefFromRowCol(newRow + height - 1, newCol + width - 1)
|
|
3261
3267
|
);
|
|
3262
3268
|
}
|
|
3269
|
+
function anchorArray(a, c) {
|
|
3270
|
+
const arg2 = a[0];
|
|
3271
|
+
if (arg2 instanceof CellReferenceNode) return c.resolveSpillRange(arg2.reference);
|
|
3272
|
+
if (arg2 instanceof SheetCellReferenceNode) return c.resolveSheetSpillRange(arg2.sheetName, arg2.cellReference);
|
|
3273
|
+
return FormulaValue.errorRef;
|
|
3274
|
+
}
|
|
3275
|
+
function single(a, c) {
|
|
3276
|
+
return new ImplicitIntersectionNode(a[0]).evaluate(c);
|
|
3277
|
+
}
|
|
3263
3278
|
|
|
3264
3279
|
// src/functions/statistical-functions.ts
|
|
3265
3280
|
function registerStatistical(r) {
|
|
@@ -4728,6 +4743,8 @@ exports.FormulaHelper = void 0;
|
|
|
4728
4743
|
const rhsVal = parseFloat(rhs);
|
|
4729
4744
|
const rhsNum = isNaN(rhsVal) ? null : rhsVal;
|
|
4730
4745
|
const rhsValue = rhsNum !== null ? FormulaValue.number(rhsNum) : FormulaValue.text(rhs);
|
|
4746
|
+
if (rhs === "" && op === "=") return { kind: "blankness", test: (v) => v.isBlank };
|
|
4747
|
+
if (rhs === "" && op === "<>") return { kind: "other", test: (v) => !v.isBlank };
|
|
4731
4748
|
if (op === "=") {
|
|
4732
4749
|
return rhsNum !== null ? numberEquality(rhsNum) : textEquality(rhs);
|
|
4733
4750
|
}
|
|
@@ -4743,6 +4760,9 @@ exports.FormulaHelper = void 0;
|
|
|
4743
4760
|
const pattern = wildcardToRegex(trimmed);
|
|
4744
4761
|
return { kind: "other", test: (v) => pattern.test(v.asText()) };
|
|
4745
4762
|
}
|
|
4763
|
+
if (trimmed === "") {
|
|
4764
|
+
return { kind: "blankness", test: (v) => v.isBlank || v.isText && v.textValue === "" };
|
|
4765
|
+
}
|
|
4746
4766
|
const num5 = parseFloat(trimmed);
|
|
4747
4767
|
return isNaN(num5) ? textEquality(trimmed) : numberEquality(num5);
|
|
4748
4768
|
}
|
|
@@ -4921,6 +4941,15 @@ var _FormulaContext = class _FormulaContext {
|
|
|
4921
4941
|
if (colon < 0) return this.getCellValue(spillRef);
|
|
4922
4942
|
return this.getRangeValues(spillRef.slice(0, colon), spillRef.slice(colon + 1));
|
|
4923
4943
|
}
|
|
4944
|
+
/** {@link resolveSpillRange} for an anchor on another sheet ('S'!A1#). */
|
|
4945
|
+
resolveSheetSpillRange(sheetName, anchorRef) {
|
|
4946
|
+
if (!this.workbook) return FormulaValue.errorRef;
|
|
4947
|
+
try {
|
|
4948
|
+
return __privateMethod(this, _FormulaContext_instances, forSheet_fn).call(this, sheetName).resolveSpillRange(anchorRef);
|
|
4949
|
+
} catch {
|
|
4950
|
+
return FormulaValue.errorRef;
|
|
4951
|
+
}
|
|
4952
|
+
}
|
|
4924
4953
|
getRangeBounds(startRef, endRef) {
|
|
4925
4954
|
const s = puredocsExcel.parseCellRef(startRef);
|
|
4926
4955
|
const e = puredocsExcel.parseCellRef(endRef);
|
|
@@ -5539,6 +5568,7 @@ function createWorkbookRecalcModel(workbook) {
|
|
|
5539
5568
|
};
|
|
5540
5569
|
}
|
|
5541
5570
|
var MAX_ADOPTED_SPILL_CELLS = 262144;
|
|
5571
|
+
var resultOf = (fv2) => fv2.isBlank ? 0 : fv2.toObject();
|
|
5542
5572
|
var normSheet = (s) => s.toUpperCase();
|
|
5543
5573
|
var normRef = (r) => r.replace(/\$/g, "").toUpperCase();
|
|
5544
5574
|
var keyOf = (sheet, ref) => `${normSheet(sheet)}!${normRef(ref)}`;
|
|
@@ -6199,7 +6229,7 @@ writeResult_fn = function(e) {
|
|
|
6199
6229
|
if (!fv2.isArray) {
|
|
6200
6230
|
__privateMethod(this, _RecalcEngine_instances, clearSpill_fn).call(this, anchorKey, changed);
|
|
6201
6231
|
__privateGet(this, _model).setCellArrayRef?.(e.sheetName, e.ref, null);
|
|
6202
|
-
const value2 = fv2
|
|
6232
|
+
const value2 = resultOf(fv2);
|
|
6203
6233
|
__privateMethod(this, _RecalcEngine_instances, writeCell_fn).call(this, e.sheetName, e.ref, value2, e.row, e.col);
|
|
6204
6234
|
changed.push({ sheet: e.sheet, row: e.row, col: e.col });
|
|
6205
6235
|
return { result: { sheet: e.sheetName, ref: e.ref, value: value2 }, changed };
|
|
@@ -6230,7 +6260,7 @@ writeResult_fn = function(e) {
|
|
|
6230
6260
|
for (let dc = 0; dc < cols; dc++) {
|
|
6231
6261
|
const r = e.row + dr, c = e.col + dc;
|
|
6232
6262
|
const ref = puredocsExcel.cellRefFromRowCol(r, c);
|
|
6233
|
-
__privateMethod(this, _RecalcEngine_instances, writeCell_fn).call(this, e.sheetName, ref, arr.get(dr, dc)
|
|
6263
|
+
__privateMethod(this, _RecalcEngine_instances, writeCell_fn).call(this, e.sheetName, ref, resultOf(arr.get(dr, dc)), r, c);
|
|
6234
6264
|
changed.push({ sheet: e.sheet, row: r, col: c });
|
|
6235
6265
|
if (dr !== 0 || dc !== 0) {
|
|
6236
6266
|
const cellKey2 = keyOf(e.sheet, ref);
|
|
@@ -6250,7 +6280,7 @@ writeResult_fn = function(e) {
|
|
|
6250
6280
|
const spillRef = `${e.ref}:${puredocsExcel.cellRefFromRowCol(e.row + rows2 - 1, e.col + cols - 1)}`;
|
|
6251
6281
|
__privateGet(this, _model).setCellArrayRef?.(e.sheetName, e.ref, spillRef);
|
|
6252
6282
|
return {
|
|
6253
|
-
result: { sheet: e.sheetName, ref: e.ref, value: arr.get(0, 0)
|
|
6283
|
+
result: { sheet: e.sheetName, ref: e.ref, value: resultOf(arr.get(0, 0)), spill: { rows: rows2, cols } },
|
|
6254
6284
|
changed
|
|
6255
6285
|
};
|
|
6256
6286
|
};
|