ooxml-core 1.12.2 → 1.13.0
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/automation/index.cjs +1353 -645
- package/dist/automation/index.mjs +1353 -645
- package/dist/i18n/index.cjs +266 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.mjs +265 -1
- package/dist/i18n/option-strings.d.ts +17 -0
- package/dist/i18n/option-strings.d.ts.map +1 -0
- package/dist/index.cjs +266 -0
- package/dist/index.mjs +266 -0
- package/dist/teams/chat.d.ts +6 -0
- package/dist/teams/chat.d.ts.map +1 -1
- package/dist/teams/index.cjs +6019 -4894
- package/dist/teams/index.d.ts +3 -0
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.mjs +5997 -4895
- package/dist/teams/pins.d.ts +22 -0
- package/dist/teams/pins.d.ts.map +1 -0
- package/dist/teams/presence-controller.d.ts +39 -0
- package/dist/teams/presence-controller.d.ts.map +1 -0
- package/dist/teams/presence.d.ts +55 -0
- package/dist/teams/presence.d.ts.map +1 -0
- package/dist/teams/store.d.ts +21 -1
- package/dist/teams/store.d.ts.map +1 -1
- package/dist/teams/view.d.ts +5 -0
- package/dist/teams/view.d.ts.map +1 -1
- package/dist/teams/workspace.d.ts +10 -2
- package/dist/teams/workspace.d.ts.map +1 -1
- package/dist/xlsx/formula/evaluator.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/amordegrc.d.ts +6 -0
- package/dist/xlsx/formula/functions/amordegrc.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/bahttext.d.ts +4 -0
- package/dist/xlsx/formula/functions/bahttext.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/bessel.d.ts +7 -0
- package/dist/xlsx/formula/functions/bessel.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/bonds.d.ts +3 -0
- package/dist/xlsx/formula/functions/bonds.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/engineering.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/financial.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/getpivotdata.d.ts +2 -0
- package/dist/xlsx/formula/functions/getpivotdata.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/groupby.d.ts +3 -0
- package/dist/xlsx/formula/functions/groupby.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/logical.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/modern.d.ts +3 -0
- package/dist/xlsx/formula/functions/modern.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/odd-securities.d.ts +3 -0
- package/dist/xlsx/formula/functions/odd-securities.d.ts.map +1 -0
- package/dist/xlsx/formula/functions/registry.d.ts.map +1 -1
- package/dist/xlsx/formula/values.d.ts +2 -0
- package/dist/xlsx/formula/values.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +3470 -2765
- package/dist/xlsx/index.mjs +3470 -2765
- package/dist/xlsx/load/index.cjs +1207 -501
- package/dist/xlsx/load/index.mjs +1207 -501
- package/dist/xlsx/ui/index.cjs +3497 -2435
- package/dist/xlsx/ui/index.mjs +3497 -2435
- package/dist/xlsx/ui/locales/de/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/de/options.d.ts +2 -0
- package/dist/xlsx/ui/locales/de/options.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/options.d.ts +2 -0
- package/dist/xlsx/ui/locales/en/options.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/options.d.ts +2 -0
- package/dist/xlsx/ui/locales/es/options.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/options.d.ts +2 -0
- package/dist/xlsx/ui/locales/fr/options.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/index.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/options.d.ts +2 -0
- package/dist/xlsx/ui/locales/zh-CN/options.d.ts.map +1 -0
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/xlsx/load/index.mjs
CHANGED
|
@@ -571,11 +571,11 @@ async function hmac(algorithm, key, data) {
|
|
|
571
571
|
var BLOCK = 16;
|
|
572
572
|
var BATCH = 4096;
|
|
573
573
|
async function aesEcbDecrypt(key, data) {
|
|
574
|
-
const
|
|
575
|
-
for (let at = BLOCK; at <
|
|
576
|
-
|
|
574
|
+
const plain3 = await aesCbcDecryptRaw(key, new Uint8Array(BLOCK), data);
|
|
575
|
+
for (let at = BLOCK; at < plain3.length && at < data.length; at++) {
|
|
576
|
+
plain3[at] = plain3[at] ^ data[at - BLOCK];
|
|
577
577
|
}
|
|
578
|
-
return
|
|
578
|
+
return plain3;
|
|
579
579
|
}
|
|
580
580
|
async function aesEcbEncrypt(key, data) {
|
|
581
581
|
const padded = new Uint8Array(Math.ceil(data.length / BLOCK) * BLOCK);
|
|
@@ -887,12 +887,12 @@ function transform(state, checksum, block) {
|
|
|
887
887
|
x[32 + k] = state[k] ^ block[k];
|
|
888
888
|
}
|
|
889
889
|
let t = 0;
|
|
890
|
-
for (let
|
|
890
|
+
for (let round3 = 0; round3 < 18; round3++) {
|
|
891
891
|
for (let k = 0; k < 48; k++) {
|
|
892
892
|
x[k] = x[k] ^ S[t];
|
|
893
893
|
t = x[k];
|
|
894
894
|
}
|
|
895
|
-
t = t +
|
|
895
|
+
t = t + round3 & 255;
|
|
896
896
|
}
|
|
897
897
|
state.set(x.subarray(0, 16));
|
|
898
898
|
t = checksum[15];
|
|
@@ -920,9 +920,9 @@ function rotl32(x, n) {
|
|
|
920
920
|
return (x << n | x >>> 32 - n) >>> 0;
|
|
921
921
|
}
|
|
922
922
|
function add32(...values2) {
|
|
923
|
-
let
|
|
924
|
-
for (const value2 of values2)
|
|
925
|
-
return
|
|
923
|
+
let sum3 = 0;
|
|
924
|
+
for (const value2 of values2) sum3 = sum3 + value2 >>> 0;
|
|
925
|
+
return sum3;
|
|
926
926
|
}
|
|
927
927
|
function padMd4Style(message) {
|
|
928
928
|
const paddedLength = message.length + 9 + 63 & -64;
|
|
@@ -1018,19 +1018,19 @@ var WORD_INDEX = [
|
|
|
1018
1018
|
(idx) => 7 * idx % 16
|
|
1019
1019
|
];
|
|
1020
1020
|
var ROUND_FNS = [f, g, h, i];
|
|
1021
|
-
function buildOps(
|
|
1022
|
-
const shifts = SHIFTS[
|
|
1023
|
-
const wordIndex = WORD_INDEX[
|
|
1021
|
+
function buildOps(round3) {
|
|
1022
|
+
const shifts = SHIFTS[round3];
|
|
1023
|
+
const wordIndex = WORD_INDEX[round3];
|
|
1024
1024
|
return Array.from({ length: 16 }, (_, idx) => {
|
|
1025
|
-
const opNumber =
|
|
1025
|
+
const opNumber = round3 * 16 + idx;
|
|
1026
1026
|
return [wordIndex(idx), shifts[idx % 4], T[opNumber]];
|
|
1027
1027
|
});
|
|
1028
1028
|
}
|
|
1029
1029
|
var ROUNDS = [0, 1, 2, 3].map(buildOps);
|
|
1030
1030
|
function transform3(state, x) {
|
|
1031
1031
|
const r = [...state];
|
|
1032
|
-
for (let
|
|
1033
|
-
applyRotatingRound(r, ROUNDS[
|
|
1032
|
+
for (let round3 = 0; round3 < 4; round3++) {
|
|
1033
|
+
applyRotatingRound(r, ROUNDS[round3], ROUND_FNS[round3], x, true);
|
|
1034
1034
|
}
|
|
1035
1035
|
for (let idx = 0; idx < 4; idx++) {
|
|
1036
1036
|
state[idx] = add32(state[idx], r[idx]);
|
|
@@ -1212,9 +1212,9 @@ var RIGHT_FNS = [f4, f32, f22, f12];
|
|
|
1212
1212
|
function transform4(state, x) {
|
|
1213
1213
|
const left2 = [...state];
|
|
1214
1214
|
const right2 = [...state];
|
|
1215
|
-
for (let
|
|
1216
|
-
applyRotatingRound(left2, LEFT_ROUNDS[
|
|
1217
|
-
applyRotatingRound(right2, RIGHT_ROUNDS[
|
|
1215
|
+
for (let round3 = 0; round3 < 4; round3++) {
|
|
1216
|
+
applyRotatingRound(left2, LEFT_ROUNDS[round3], LEFT_FNS[round3], x);
|
|
1217
|
+
applyRotatingRound(right2, RIGHT_ROUNDS[round3], RIGHT_FNS[round3], x);
|
|
1218
1218
|
}
|
|
1219
1219
|
const orig = state;
|
|
1220
1220
|
const newState = [
|
|
@@ -1426,8 +1426,8 @@ function applyLane(r, ops, f6, x, startTarget) {
|
|
|
1426
1426
|
const i2 = (target + 2) % 5;
|
|
1427
1427
|
const i3 = (target + 3) % 5;
|
|
1428
1428
|
const i4 = (target + 4) % 5;
|
|
1429
|
-
const
|
|
1430
|
-
const newTarget = (
|
|
1429
|
+
const sum3 = r[target] + f6(r[i1], r[i2], r[i3]) + x[k] + addConst >>> 0;
|
|
1430
|
+
const newTarget = (sum3 << s | sum3 >>> 32 - s) + r[i4] >>> 0;
|
|
1431
1431
|
const c2 = r[i2];
|
|
1432
1432
|
r[i2] = (c2 << 10 | c2 >>> 22) >>> 0;
|
|
1433
1433
|
r[target] = newTarget;
|
|
@@ -1440,9 +1440,9 @@ function transform5(state, x) {
|
|
|
1440
1440
|
const right2 = [...state];
|
|
1441
1441
|
let leftTarget = 0;
|
|
1442
1442
|
let rightTarget = 0;
|
|
1443
|
-
for (let
|
|
1444
|
-
leftTarget = applyLane(left2, LEFT_ROUNDS2[
|
|
1445
|
-
rightTarget = applyLane(right2, RIGHT_ROUNDS2[
|
|
1443
|
+
for (let round3 = 0; round3 < 5; round3++) {
|
|
1444
|
+
leftTarget = applyLane(left2, LEFT_ROUNDS2[round3], LEFT_FNS2[round3], x, leftTarget);
|
|
1445
|
+
rightTarget = applyLane(right2, RIGHT_ROUNDS2[round3], RIGHT_FNS2[round3], x, rightTarget);
|
|
1446
1446
|
}
|
|
1447
1447
|
const orig = state;
|
|
1448
1448
|
const newState = [
|
|
@@ -2228,18 +2228,18 @@ var BLOCK_BYTES = 64;
|
|
|
2228
2228
|
var WORDS = 8;
|
|
2229
2229
|
var ROUNDS2 = 10;
|
|
2230
2230
|
var words = () => ({ hi: new Uint32Array(WORDS), lo: new Uint32Array(WORDS) });
|
|
2231
|
-
function op(src,
|
|
2231
|
+
function op(src, column2, out) {
|
|
2232
2232
|
const { hi: h2, lo: l } = src;
|
|
2233
|
-
const b0 = h2[
|
|
2234
|
-
const b1 = h2[
|
|
2235
|
-
const b2 = h2[
|
|
2236
|
-
const b3 = h2[
|
|
2237
|
-
const b4 = l[
|
|
2238
|
-
const b5 = l[
|
|
2239
|
-
const b6 = l[
|
|
2240
|
-
const b7 = l[
|
|
2241
|
-
out.hi[
|
|
2242
|
-
out.lo[
|
|
2233
|
+
const b0 = h2[column2] >>> 24;
|
|
2234
|
+
const b1 = h2[column2 + 7 & 7] >>> 16 & 255;
|
|
2235
|
+
const b2 = h2[column2 + 6 & 7] >>> 8 & 255;
|
|
2236
|
+
const b3 = h2[column2 + 5 & 7] & 255;
|
|
2237
|
+
const b4 = l[column2 + 4 & 7] >>> 24;
|
|
2238
|
+
const b5 = l[column2 + 3 & 7] >>> 16 & 255;
|
|
2239
|
+
const b6 = l[column2 + 2 & 7] >>> 8 & 255;
|
|
2240
|
+
const b7 = l[column2 + 1 & 7] & 255;
|
|
2241
|
+
out.hi[column2] = TABLES_HI2[b0] ^ TABLES_HI2[256 + b1] ^ TABLES_HI2[512 + b2] ^ TABLES_HI2[768 + b3] ^ TABLES_HI2[1024 + b4] ^ TABLES_HI2[1280 + b5] ^ TABLES_HI2[1536 + b6] ^ TABLES_HI2[1792 + b7];
|
|
2242
|
+
out.lo[column2] = TABLES_LO2[b0] ^ TABLES_LO2[256 + b1] ^ TABLES_LO2[512 + b2] ^ TABLES_LO2[768 + b3] ^ TABLES_LO2[1024 + b4] ^ TABLES_LO2[1280 + b5] ^ TABLES_LO2[1536 + b6] ^ TABLES_LO2[1792 + b7];
|
|
2243
2243
|
}
|
|
2244
2244
|
var scratch = { key: words(), state: words(), initial: words(), nextKey: words(), next: words() };
|
|
2245
2245
|
function processBlock(hash2, block) {
|
|
@@ -2252,10 +2252,10 @@ function processBlock(hash2, block) {
|
|
|
2252
2252
|
key.lo.set(hash2.lo);
|
|
2253
2253
|
state.hi.set(initial.hi);
|
|
2254
2254
|
state.lo.set(initial.lo);
|
|
2255
|
-
for (let
|
|
2255
|
+
for (let round3 = 0; round3 < ROUNDS2; round3++) {
|
|
2256
2256
|
for (let j = 0; j < WORDS; j++) op(key, j, nextKey);
|
|
2257
|
-
nextKey.hi[0] = nextKey.hi[0] ^ ROUND_CONSTANTS_HI2[
|
|
2258
|
-
nextKey.lo[0] = nextKey.lo[0] ^ ROUND_CONSTANTS_LO2[
|
|
2257
|
+
nextKey.hi[0] = nextKey.hi[0] ^ ROUND_CONSTANTS_HI2[round3];
|
|
2258
|
+
nextKey.lo[0] = nextKey.lo[0] ^ ROUND_CONSTANTS_LO2[round3];
|
|
2259
2259
|
for (let j = 0; j < WORDS; j++) {
|
|
2260
2260
|
op(state, j, next);
|
|
2261
2261
|
next.hi[j] = next.hi[j] ^ nextKey.hi[j];
|
|
@@ -4167,6 +4167,7 @@ function formatRange(range) {
|
|
|
4167
4167
|
const a2 = formatAddress(start);
|
|
4168
4168
|
return start.row === end.row && start.col === end.col ? a2 : `${a2}:${formatAddress(end)}`;
|
|
4169
4169
|
}
|
|
4170
|
+
var rangeContains = (range, address2) => address2.row >= range.start.row && address2.row <= range.end.row && address2.col >= range.start.col && address2.col <= range.end.col;
|
|
4170
4171
|
var rangeSize = (range) => (range.end.row - range.start.row + 1) * (range.end.col - range.start.col + 1);
|
|
4171
4172
|
var cellKey = (row2, col) => row2 * (MAX_COL + 1) + col;
|
|
4172
4173
|
function quoteSheetName(name) {
|
|
@@ -5489,14 +5490,14 @@ function parseCellInput(text, options = {}) {
|
|
|
5489
5490
|
if (text === "") return { value: null };
|
|
5490
5491
|
if (text.startsWith("=") && text.length > 1) return { value: null, formula: text.slice(1) };
|
|
5491
5492
|
if (text.startsWith("'")) return { value: text.slice(1) };
|
|
5492
|
-
const
|
|
5493
|
-
if (
|
|
5494
|
-
const upper2 =
|
|
5495
|
-
if (
|
|
5493
|
+
const trimmed2 = text.trim();
|
|
5494
|
+
if (trimmed2 === "") return { value: text };
|
|
5495
|
+
const upper2 = trimmed2.toUpperCase();
|
|
5496
|
+
if (trimmed2 === text) {
|
|
5496
5497
|
if (upper2 === "TRUE" || upper2 === "FALSE") return { value: upper2 === "TRUE" };
|
|
5497
5498
|
if (isErrorCode(upper2)) return { value: cellError(upper2) };
|
|
5498
5499
|
}
|
|
5499
|
-
const parsed = parseNumberInput(
|
|
5500
|
+
const parsed = parseNumberInput(trimmed2) ?? parseFractionInput(trimmed2) ?? parseDateTimeInput(trimmed2, options.date1904 ?? false);
|
|
5500
5501
|
if (!parsed) return { value: text };
|
|
5501
5502
|
return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
|
|
5502
5503
|
}
|
|
@@ -5561,10 +5562,10 @@ function displayText(workbook, cell) {
|
|
|
5561
5562
|
|
|
5562
5563
|
// xlsx/filter-rows.ts
|
|
5563
5564
|
function rowMatchesFilter(workbook, sheet, row2, filter2) {
|
|
5564
|
-
return (filter2.columns ?? []).every((
|
|
5565
|
-
if (!
|
|
5566
|
-
const text = displayText(workbook, getCell(sheet, row2, filter2.range.start.col +
|
|
5567
|
-
return text === "" ? !!
|
|
5565
|
+
return (filter2.columns ?? []).every((column2) => {
|
|
5566
|
+
if (!column2.values && !column2.blank) return true;
|
|
5567
|
+
const text = displayText(workbook, getCell(sheet, row2, filter2.range.start.col + column2.offset));
|
|
5568
|
+
return text === "" ? !!column2.blank : (column2.values ?? []).includes(text);
|
|
5568
5569
|
});
|
|
5569
5570
|
}
|
|
5570
5571
|
function isFilteredRow(workbook, sheet, row2) {
|
|
@@ -6580,8 +6581,8 @@ function aggregate(records, field, type) {
|
|
|
6580
6581
|
if (!numbers3.length) return type === "average" ? { error: "#DIV/0!" } : 0;
|
|
6581
6582
|
if (type === "min") return numbers3.reduce((a2, b) => Math.min(a2, b));
|
|
6582
6583
|
if (type === "max") return numbers3.reduce((a2, b) => Math.max(a2, b));
|
|
6583
|
-
const
|
|
6584
|
-
return type === "average" ?
|
|
6584
|
+
const sum3 = numbers3.reduce((total2, value2) => total2 + value2, 0);
|
|
6585
|
+
return type === "average" ? sum3 / numbers3.length : sum3;
|
|
6585
6586
|
}
|
|
6586
6587
|
var pivotMeasureNumber = (pivot, records, measure) => aggregate(records, pivot.fields.indexOf(measure.field), measure.aggregate);
|
|
6587
6588
|
var pivotNumbers = (pivot, records) => pivotMeasures(pivot).map((measure) => pivotMeasureNumber(pivot, records, measure));
|
|
@@ -6630,7 +6631,7 @@ function pivotHeaders(pivot, columns, labels, label3) {
|
|
|
6630
6631
|
first2,
|
|
6631
6632
|
[
|
|
6632
6633
|
...labels.map(() => null),
|
|
6633
|
-
...columns.flatMap((
|
|
6634
|
+
...columns.flatMap((column2) => [label3(column2), ...measures.slice(1).map(() => null)]),
|
|
6634
6635
|
...measures.map((measure) => `Total ${measure.caption}`)
|
|
6635
6636
|
],
|
|
6636
6637
|
[
|
|
@@ -6664,9 +6665,9 @@ function appendFirstPivotValues(pivot, context) {
|
|
|
6664
6665
|
pivotMeasures(pivot).forEach((measure, m) => {
|
|
6665
6666
|
const numbers3 = (keys, records) => [
|
|
6666
6667
|
...columnItems.map(
|
|
6667
|
-
(
|
|
6668
|
+
(column2) => pivotMeasureNumber(
|
|
6668
6669
|
pivot,
|
|
6669
|
-
buckets.get(JSON.stringify([...keys, pivotValueKey(
|
|
6670
|
+
buckets.get(JSON.stringify([...keys, pivotValueKey(column2)])) ?? [],
|
|
6670
6671
|
measure
|
|
6671
6672
|
)
|
|
6672
6673
|
),
|
|
@@ -6752,9 +6753,9 @@ function hierarchicalPivotGrid(pivot) {
|
|
|
6752
6753
|
if (!children2.has(outer)) children2.set(outer, /* @__PURE__ */ new Set());
|
|
6753
6754
|
children2.get(outer).add(inner);
|
|
6754
6755
|
if (pivot.columnField) {
|
|
6755
|
-
const
|
|
6756
|
+
const column2 = pivotValueKey(record[columnField] ?? null);
|
|
6756
6757
|
for (const key of [[], [outer], [outer, inner]])
|
|
6757
|
-
collect(buckets, JSON.stringify([...key,
|
|
6758
|
+
collect(buckets, JSON.stringify([...key, column2]), record);
|
|
6758
6759
|
}
|
|
6759
6760
|
}
|
|
6760
6761
|
const dimensions = pivotHeaderDimensions(pivot, columnItems.length, rowLabelColumns);
|
|
@@ -6772,7 +6773,7 @@ function hierarchicalPivotGrid(pivot) {
|
|
|
6772
6773
|
};
|
|
6773
6774
|
const bands = (keys, records) => [
|
|
6774
6775
|
...columnItems.map(
|
|
6775
|
-
(
|
|
6776
|
+
(column2) => pivotNumbers(pivot, buckets.get(JSON.stringify([...keys, pivotValueKey(column2)])) ?? [])
|
|
6776
6777
|
),
|
|
6777
6778
|
pivotNumbers(pivot, records)
|
|
6778
6779
|
];
|
|
@@ -6846,9 +6847,9 @@ function hierarchicalPivotGrid(pivot) {
|
|
|
6846
6847
|
],
|
|
6847
6848
|
[
|
|
6848
6849
|
...columnItems.map(
|
|
6849
|
-
(
|
|
6850
|
+
(column2) => pivotMeasureNumber(
|
|
6850
6851
|
pivot,
|
|
6851
|
-
buckets.get(JSON.stringify([...keys, pivotValueKey(
|
|
6852
|
+
buckets.get(JSON.stringify([...keys, pivotValueKey(column2)])) ?? [],
|
|
6852
6853
|
measure
|
|
6853
6854
|
)
|
|
6854
6855
|
),
|
|
@@ -7048,6 +7049,9 @@ function pivotDataGrid(pivot) {
|
|
|
7048
7049
|
]);
|
|
7049
7050
|
return { values: values2, rowItems, columnItems, firstDataRow };
|
|
7050
7051
|
}
|
|
7052
|
+
function pivotTableAt(sheet, at) {
|
|
7053
|
+
return sheet.pivotTables?.find((pivot) => rangeContains(pivot.location, at));
|
|
7054
|
+
}
|
|
7051
7055
|
|
|
7052
7056
|
// xlsx/pivot/admission.ts
|
|
7053
7057
|
var X14 = "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main";
|
|
@@ -7226,10 +7230,10 @@ function pivotValueAxisItems(measures, columns, columnIndices) {
|
|
|
7226
7230
|
`<i${attrs({ i: measure || void 0 })}><x${attrs({ v: measure || void 0 })}/></i>`
|
|
7227
7231
|
);
|
|
7228
7232
|
} else {
|
|
7229
|
-
for (let
|
|
7233
|
+
for (let column2 = 0; column2 < columns; column2++)
|
|
7230
7234
|
for (let measure = 0; measure < measures; measure++) {
|
|
7231
7235
|
entries.push(
|
|
7232
|
-
`<i${attrs({ r: measure ? 1 : void 0, i: measure || void 0 })}>${measure ? "" : `<x${attrs({ v: (columnIndices?.[
|
|
7236
|
+
`<i${attrs({ r: measure ? 1 : void 0, i: measure || void 0 })}>${measure ? "" : `<x${attrs({ v: (columnIndices?.[column2] ?? column2) || void 0 })}/>`}<x${attrs({ v: measure || void 0 })}/></i>`
|
|
7233
7237
|
);
|
|
7234
7238
|
}
|
|
7235
7239
|
for (let measure = 0; measure < measures; measure++)
|
|
@@ -7300,8 +7304,8 @@ function assertPageAxisItems(root, pivot, shared, cache2, recordRoot) {
|
|
|
7300
7304
|
literals(recordRoot);
|
|
7301
7305
|
const cacheFields = children(first(cache2, "cacheFields", NS.x), "cacheField", NS.x);
|
|
7302
7306
|
if (pivot.columnField) {
|
|
7303
|
-
const
|
|
7304
|
-
const list = first(
|
|
7307
|
+
const column2 = children(first(root, "pivotFields", NS.x), "pivotField", NS.x)[pivot.fields.indexOf(pivot.columnField)];
|
|
7308
|
+
const list = first(column2, "extLst", NS.x);
|
|
7305
7309
|
const extensions = list ? children(list, "ext", NS.x) : [];
|
|
7306
7310
|
if (extensions.some(
|
|
7307
7311
|
(extension) => children(
|
|
@@ -8689,14 +8693,14 @@ function rewrite(formula, visit) {
|
|
|
8689
8693
|
}
|
|
8690
8694
|
function stripFuturePrefixes(formula) {
|
|
8691
8695
|
if (!formula.includes("_xl")) return formula;
|
|
8692
|
-
const
|
|
8696
|
+
const plain3 = rewrite(formula, (token, next, out) => {
|
|
8693
8697
|
if (!next.startsWith("(")) return false;
|
|
8694
8698
|
const stripped = token.replace(/^(_xlfn\.)?(_xlws\.)?/i, "");
|
|
8695
8699
|
if (stripped === token) return false;
|
|
8696
8700
|
out.push(stripped);
|
|
8697
8701
|
return true;
|
|
8698
8702
|
});
|
|
8699
|
-
return fromStoredSyntax(
|
|
8703
|
+
return fromStoredSyntax(plain3);
|
|
8700
8704
|
}
|
|
8701
8705
|
function addFuturePrefixes(formula) {
|
|
8702
8706
|
return rewrite(toStoredSyntax(formula), (token, next, out) => {
|
|
@@ -8970,7 +8974,7 @@ function parsePoint(element2) {
|
|
|
8970
8974
|
paragraphs,
|
|
8971
8975
|
text: paragraphs.join("\n")
|
|
8972
8976
|
};
|
|
8973
|
-
const
|
|
8977
|
+
const optional2 = [
|
|
8974
8978
|
["connectionId", stringAttribute(element2, "cxnId")],
|
|
8975
8979
|
["presAssocId", stringAttribute(prSet, "presAssocID")],
|
|
8976
8980
|
["presName", stringAttribute(prSet, "presName")],
|
|
@@ -8982,7 +8986,7 @@ function parsePoint(element2) {
|
|
|
8982
8986
|
["quickStyleTypeId", stringAttribute(prSet, "qsTypeId")],
|
|
8983
8987
|
["colorsTypeId", stringAttribute(prSet, "csTypeId")]
|
|
8984
8988
|
];
|
|
8985
|
-
for (const [key, value2] of
|
|
8989
|
+
for (const [key, value2] of optional2)
|
|
8986
8990
|
if (value2 !== void 0) point[key] = value2;
|
|
8987
8991
|
const customLayout = prSet ? parseCustomLayoutAttributes(attributeReader(prSet)) : void 0;
|
|
8988
8992
|
if (customLayout) point.customLayout = customLayout;
|
|
@@ -9929,16 +9933,16 @@ function readAutoFilter(node) {
|
|
|
9929
9933
|
if (!node || !range) return void 0;
|
|
9930
9934
|
const filter2 = { range };
|
|
9931
9935
|
const columns = [];
|
|
9932
|
-
for (const
|
|
9936
|
+
for (const column2 of xChildren(node, "filterColumn")) {
|
|
9933
9937
|
const entry3 = {
|
|
9934
|
-
offset: numAttr(
|
|
9938
|
+
offset: numAttr(column2, "colId") ?? 0
|
|
9935
9939
|
};
|
|
9936
|
-
const filters = xFirst(
|
|
9940
|
+
const filters = xFirst(column2, "filters");
|
|
9937
9941
|
if (filters) {
|
|
9938
9942
|
entry3.values = xChildren(filters, "filter").map((f6) => att(f6, "val") ?? "");
|
|
9939
9943
|
if (boolAttr(filters, "blank")) entry3.blank = true;
|
|
9940
9944
|
}
|
|
9941
|
-
entry3.sourceXml = outerXml(
|
|
9945
|
+
entry3.sourceXml = outerXml(column2).replace(MAIN_NS_DECL, "");
|
|
9942
9946
|
columns.push(entry3);
|
|
9943
9947
|
}
|
|
9944
9948
|
if (columns.length) filter2.columns = columns;
|
|
@@ -11886,16 +11890,16 @@ function parseTable(xml, partName) {
|
|
|
11886
11890
|
const name = att(root, "name") ?? att(root, "displayName") ?? "Table";
|
|
11887
11891
|
const columns = xChildren(xFirst(root, "tableColumns") ?? root, "tableColumn").map(
|
|
11888
11892
|
(node) => {
|
|
11889
|
-
const
|
|
11893
|
+
const column2 = { name: att(node, "name") ?? "" };
|
|
11890
11894
|
const id = numAttr(node, "id");
|
|
11891
|
-
if (id !== void 0 && Number.isInteger(id) && id >= 0)
|
|
11895
|
+
if (id !== void 0 && Number.isInteger(id) && id >= 0) column2.sourceId = id;
|
|
11892
11896
|
const fn = att(node, "totalsRowFunction");
|
|
11893
|
-
if (fn && fn !== "none")
|
|
11897
|
+
if (fn && fn !== "none") column2.totalsRowFunction = fn;
|
|
11894
11898
|
const label3 = att(node, "totalsRowLabel");
|
|
11895
|
-
if (label3 !== void 0)
|
|
11899
|
+
if (label3 !== void 0) column2.totalsRowLabel = label3;
|
|
11896
11900
|
const calculated = xFirst(node, "calculatedColumnFormula");
|
|
11897
|
-
if (calculated)
|
|
11898
|
-
return
|
|
11901
|
+
if (calculated) column2.calculatedColumnFormula = stripFuturePrefixes(xText(calculated));
|
|
11902
|
+
return column2;
|
|
11899
11903
|
}
|
|
11900
11904
|
);
|
|
11901
11905
|
const table2 = {
|
|
@@ -12193,12 +12197,12 @@ function guidFrom(seed) {
|
|
|
12193
12197
|
let h1 = 2166136261;
|
|
12194
12198
|
let h2 = 16777619;
|
|
12195
12199
|
const hex = [];
|
|
12196
|
-
for (let
|
|
12200
|
+
for (let round3 = 0; round3 < 4; round3++) {
|
|
12197
12201
|
for (let i2 = 0; i2 < seed.length; i2++) {
|
|
12198
12202
|
h1 = Math.imul(h1 ^ seed.charCodeAt(i2), 16777619) >>> 0;
|
|
12199
|
-
h2 = Math.imul(h2 ^ seed.charCodeAt(i2) +
|
|
12203
|
+
h2 = Math.imul(h2 ^ seed.charCodeAt(i2) + round3, 1540483477) >>> 0;
|
|
12200
12204
|
}
|
|
12201
|
-
h1 = Math.imul(h1 ^
|
|
12205
|
+
h1 = Math.imul(h1 ^ round3, 668265261) >>> 0;
|
|
12202
12206
|
hex.push(((h1 ^ h2) >>> 0).toString(16).toUpperCase().padStart(8, "0"));
|
|
12203
12207
|
}
|
|
12204
12208
|
const s = hex.join("");
|
|
@@ -13034,8 +13038,8 @@ function chartPaletteSeriesColorChoice(palette, i2, n) {
|
|
|
13034
13038
|
let transform6;
|
|
13035
13039
|
if (palette.meth === "cycle") {
|
|
13036
13040
|
base = palette.base[i2 % palette.base.length];
|
|
13037
|
-
const
|
|
13038
|
-
transform6 = (palette.variations.length ? palette.variations[
|
|
13041
|
+
const round3 = Math.floor(i2 / palette.base.length);
|
|
13042
|
+
transform6 = (palette.variations.length ? palette.variations[round3 % palette.variations.length] : {}) ?? {};
|
|
13039
13043
|
} else {
|
|
13040
13044
|
const index3 = palette.meth === "withinLinearReversed" ? n - 1 - i2 : i2;
|
|
13041
13045
|
base = palette.base[0];
|
|
@@ -14061,8 +14065,8 @@ function parseNumberText(input) {
|
|
|
14061
14065
|
const signText = `${signed?.[1] ?? ""}${signed?.[2] ?? ""}`;
|
|
14062
14066
|
if (signText.length <= 1) {
|
|
14063
14067
|
const body = text.slice(signed?.[0].length ?? 0);
|
|
14064
|
-
const
|
|
14065
|
-
if (
|
|
14068
|
+
const plain3 = parsePlainNumber(body);
|
|
14069
|
+
if (plain3 !== void 0) return (signText === "-" ? -1 : 1) * sign * plain3 * scale2;
|
|
14066
14070
|
}
|
|
14067
14071
|
if (scale2 !== 1 || sign !== 1) return void 0;
|
|
14068
14072
|
const fraction = /^([+-]?)(?:(\d+)\s+)?(\d+)\/(\d+)$/.exec(text);
|
|
@@ -14103,13 +14107,13 @@ function numberToText(value2) {
|
|
|
14103
14107
|
const [mantissa = "0", expText = "0"] = abs.toExponential(14).split("e");
|
|
14104
14108
|
const exponent = Number(expText);
|
|
14105
14109
|
const digits2 = mantissa.replace(".", "").replace(/0+$/, "") || "0";
|
|
14106
|
-
let
|
|
14110
|
+
let plain3;
|
|
14107
14111
|
if (exponent >= 0) {
|
|
14108
|
-
|
|
14112
|
+
plain3 = digits2.length <= exponent + 1 ? digits2 + "0".repeat(exponent + 1 - digits2.length) : `${digits2.slice(0, exponent + 1)}.${digits2.slice(exponent + 1)}`;
|
|
14109
14113
|
} else {
|
|
14110
|
-
|
|
14114
|
+
plain3 = `0.${"0".repeat(-exponent - 1)}${digits2}`;
|
|
14111
14115
|
}
|
|
14112
|
-
if (
|
|
14116
|
+
if (plain3.length <= 20) return negative ? `-${plain3}` : plain3;
|
|
14113
14117
|
const mant = digits2.length > 1 ? `${digits2[0]}.${digits2.slice(1)}` : digits2;
|
|
14114
14118
|
const exp2 = `${exponent < 0 ? "-" : "+"}${String(Math.abs(exponent)).padStart(2, "0")}`;
|
|
14115
14119
|
return `${negative ? "-" : ""}${mant}E${exp2}`;
|
|
@@ -14262,6 +14266,7 @@ var RefValue = class {
|
|
|
14262
14266
|
return this.areas.length === 1 && area !== void 0 && area.range.start.row === area.range.end.row && area.range.start.col === area.range.end.col;
|
|
14263
14267
|
}
|
|
14264
14268
|
};
|
|
14269
|
+
var OMITTED_PREFIX = "#omitted:";
|
|
14265
14270
|
var LambdaValue = class {
|
|
14266
14271
|
constructor(params, body, scope) {
|
|
14267
14272
|
this.params = params;
|
|
@@ -14764,10 +14769,10 @@ function sortBy(args, ctx) {
|
|
|
14764
14769
|
const by = ctx.toMatrix(args[i2] ?? null);
|
|
14765
14770
|
const order = i2 + 1 < args.length && args[i2 + 1] !== null ? num2(ctx.toScalar(args[i2 + 1] ?? null)) : 1;
|
|
14766
14771
|
if (order !== 1 && order !== -1) fail(ERR.VALUE);
|
|
14767
|
-
const
|
|
14772
|
+
const column2 = by.cols === 1 && by.rows === m.rows;
|
|
14768
14773
|
const row2 = by.rows === 1 && by.cols === m.cols;
|
|
14769
|
-
if (!
|
|
14770
|
-
const thisByCol = !
|
|
14774
|
+
if (!column2 && !row2) fail(ERR.VALUE);
|
|
14775
|
+
const thisByCol = !column2;
|
|
14771
14776
|
if (byCol !== void 0 && byCol !== thisByCol) fail(ERR.VALUE);
|
|
14772
14777
|
byCol = thisByCol;
|
|
14773
14778
|
keys.push({ values: by.flat(), descending: order === -1 });
|
|
@@ -14780,14 +14785,14 @@ function unique(args, ctx) {
|
|
|
14780
14785
|
const byCol = args.length > 1 && args[1] !== null && toBool(ctx.toScalar(args[1] ?? null));
|
|
14781
14786
|
const once = args.length > 2 && args[2] !== null && toBool(ctx.toScalar(args[2] ?? null));
|
|
14782
14787
|
if (byCol) m = transpose(m);
|
|
14783
|
-
const
|
|
14788
|
+
const keyOf2 = (row2) => JSON.stringify(
|
|
14784
14789
|
row2.map(
|
|
14785
14790
|
(v) => isError(v) ? `#${v.error}` : typeof v === "string" ? `s${v.toLowerCase()}` : v
|
|
14786
14791
|
)
|
|
14787
14792
|
);
|
|
14788
14793
|
const counts = /* @__PURE__ */ new Map();
|
|
14789
14794
|
for (const row2 of m.data) {
|
|
14790
|
-
const key =
|
|
14795
|
+
const key = keyOf2(row2);
|
|
14791
14796
|
const entry3 = counts.get(key);
|
|
14792
14797
|
if (entry3) entry3.count++;
|
|
14793
14798
|
else counts.set(key, { row: row2, count: 1 });
|
|
@@ -15099,20 +15104,20 @@ function recordFilter(table2, criteria) {
|
|
|
15099
15104
|
});
|
|
15100
15105
|
const alternatives = rows.map(
|
|
15101
15106
|
(row2) => row2.flatMap((cell, c2) => {
|
|
15102
|
-
const
|
|
15107
|
+
const column2 = columns[c2] ?? -1;
|
|
15103
15108
|
if (cell === null || cell === "") return [];
|
|
15104
|
-
if (
|
|
15109
|
+
if (column2 < 0) return [() => false];
|
|
15105
15110
|
const matches2 = makeCriteria(cell);
|
|
15106
|
-
return [(record) => matches2(record[
|
|
15111
|
+
return [(record) => matches2(record[column2] ?? null)];
|
|
15107
15112
|
})
|
|
15108
15113
|
);
|
|
15109
15114
|
return (record) => alternatives.some((tests) => tests.every((test) => test(record)));
|
|
15110
15115
|
}
|
|
15111
15116
|
function selected(ctx, args) {
|
|
15112
15117
|
const table2 = tableOf(ctx, args[0]);
|
|
15113
|
-
const
|
|
15118
|
+
const column2 = fieldIndex(table2, args[1]);
|
|
15114
15119
|
const matches2 = recordFilter(table2, ctx.toMatrix(args[2] ?? null).data);
|
|
15115
|
-
return table2.records.filter(matches2).map((record) => record[
|
|
15120
|
+
return table2.records.filter(matches2).map((record) => record[column2] ?? null);
|
|
15116
15121
|
}
|
|
15117
15122
|
var numbers = (values2) => {
|
|
15118
15123
|
for (const v of values2) if (isError(v)) fail(v);
|
|
@@ -15855,6 +15860,90 @@ var COMPLEX_FUNCTIONS = [
|
|
|
15855
15860
|
)
|
|
15856
15861
|
];
|
|
15857
15862
|
|
|
15863
|
+
// xlsx/formula/functions/bessel.ts
|
|
15864
|
+
var C7 = "Engineering";
|
|
15865
|
+
var EULER = 0.5772156649015329;
|
|
15866
|
+
var LIMIT = 1e6;
|
|
15867
|
+
function besselJAll(x, nmax) {
|
|
15868
|
+
const top = Math.max(nmax, Math.ceil(x));
|
|
15869
|
+
let m = top + 40 + Math.ceil(2 * Math.sqrt(top));
|
|
15870
|
+
if (m % 2 === 1) m += 1;
|
|
15871
|
+
const j = new Array(m + 2).fill(0);
|
|
15872
|
+
j[m] = 1e-30;
|
|
15873
|
+
for (let k = m; k >= 1; k--) {
|
|
15874
|
+
j[k - 1] = 2 * k / x * j[k] - j[k + 1];
|
|
15875
|
+
if (Math.abs(j[k - 1]) > 1e250) {
|
|
15876
|
+
for (let i2 = k - 1; i2 <= m + 1; i2++) j[i2] = j[i2] * 1e-250;
|
|
15877
|
+
}
|
|
15878
|
+
}
|
|
15879
|
+
let sum3 = j[0];
|
|
15880
|
+
for (let k = 2; k <= m; k += 2) sum3 += 2 * j[k];
|
|
15881
|
+
return j.slice(0, m + 1).map((v) => v / sum3);
|
|
15882
|
+
}
|
|
15883
|
+
function besselJ(x, n) {
|
|
15884
|
+
if (x === 0) return n === 0 ? 1 : 0;
|
|
15885
|
+
const value2 = besselJAll(Math.abs(x), n)[n] ?? 0;
|
|
15886
|
+
return x < 0 && n % 2 === 1 ? -value2 : value2;
|
|
15887
|
+
}
|
|
15888
|
+
function besselY(x, n) {
|
|
15889
|
+
const j = besselJAll(x, n + 2);
|
|
15890
|
+
const j0 = j[0];
|
|
15891
|
+
const j1 = j[1];
|
|
15892
|
+
const lg = Math.log(x / 2) + EULER;
|
|
15893
|
+
let s0 = 0;
|
|
15894
|
+
let s1 = 0;
|
|
15895
|
+
for (let k = 1; 2 * k + 1 < j.length; k++) {
|
|
15896
|
+
const sign = k % 2 === 1 ? 1 : -1;
|
|
15897
|
+
s0 += sign * j[2 * k] / k;
|
|
15898
|
+
s1 += sign * (j[2 * k - 1] - j[2 * k + 1]) / k;
|
|
15899
|
+
}
|
|
15900
|
+
let prev = 2 / Math.PI * lg * j0 + 4 / Math.PI * s0;
|
|
15901
|
+
if (n === 0) return prev;
|
|
15902
|
+
let cur = 2 / Math.PI * (lg * j1 - j0 / x) - 2 / Math.PI * s1;
|
|
15903
|
+
for (let k = 1; k < n; k++) {
|
|
15904
|
+
const next = 2 * k / x * cur - prev;
|
|
15905
|
+
prev = cur;
|
|
15906
|
+
cur = next;
|
|
15907
|
+
}
|
|
15908
|
+
return cur;
|
|
15909
|
+
}
|
|
15910
|
+
function besselI(x, n) {
|
|
15911
|
+
const ax = Math.abs(x);
|
|
15912
|
+
if (ax > 700) fail(ERR.NUM);
|
|
15913
|
+
if (ax === 0) return n === 0 ? 1 : 0;
|
|
15914
|
+
const points = 2 * (Math.ceil(ax) + n) + 80;
|
|
15915
|
+
let sum3 = 0;
|
|
15916
|
+
for (let i2 = 0; i2 < points; i2++) {
|
|
15917
|
+
const t = 2 * Math.PI * i2 / points;
|
|
15918
|
+
sum3 += Math.exp(ax * (Math.cos(t) - 1)) * Math.cos(n * t);
|
|
15919
|
+
}
|
|
15920
|
+
const value2 = sum3 / points * Math.exp(ax);
|
|
15921
|
+
return x < 0 && n % 2 === 1 ? -value2 : value2;
|
|
15922
|
+
}
|
|
15923
|
+
function besselK(x, n) {
|
|
15924
|
+
const h2 = 0.1;
|
|
15925
|
+
let sum3 = 0.5 * Math.exp(-x);
|
|
15926
|
+
for (let i2 = 1; i2 < 1e5; i2++) {
|
|
15927
|
+
const t = i2 * h2;
|
|
15928
|
+
const term = Math.exp(-x * Math.cosh(t)) * Math.cosh(n * t);
|
|
15929
|
+
sum3 += term;
|
|
15930
|
+
if (term < sum3 * 1e-18 && t > n) break;
|
|
15931
|
+
}
|
|
15932
|
+
return sum3 * h2;
|
|
15933
|
+
}
|
|
15934
|
+
var bessel = (name, description, positiveOnly, fn) => spec(name, C7, `${name}(x, n)`, description, 2, 2, (args) => {
|
|
15935
|
+
const x = num2(args[0]);
|
|
15936
|
+
const n = Math.trunc(num2(args[1]));
|
|
15937
|
+
if (n < 0 || positiveOnly && x <= 0 || Math.abs(x) > LIMIT) fail(ERR.NUM);
|
|
15938
|
+
return finite(fn(x, n));
|
|
15939
|
+
});
|
|
15940
|
+
var BESSEL_FUNCTIONS = [
|
|
15941
|
+
bessel("BESSELJ", "The Bessel function Jn(x).", false, besselJ),
|
|
15942
|
+
bessel("BESSELY", "The Bessel function Yn(x), also called the Weber function.", true, besselY),
|
|
15943
|
+
bessel("BESSELI", "The modified Bessel function In(x).", false, besselI),
|
|
15944
|
+
bessel("BESSELK", "The modified Bessel function Kn(x).", true, besselK)
|
|
15945
|
+
];
|
|
15946
|
+
|
|
15858
15947
|
// xlsx/formula/functions/convert.ts
|
|
15859
15948
|
var table = /* @__PURE__ */ new Map();
|
|
15860
15949
|
var add = (dimension2, names, factor, extra = {}) => {
|
|
@@ -16033,7 +16122,7 @@ var CONVERT_FUNCTIONS = [
|
|
|
16033
16122
|
];
|
|
16034
16123
|
|
|
16035
16124
|
// xlsx/formula/functions/engineering.ts
|
|
16036
|
-
var
|
|
16125
|
+
var C8 = "Engineering";
|
|
16037
16126
|
var BASES = { BIN: 2, OCT: 8, DEC: 10, HEX: 16 };
|
|
16038
16127
|
var BITS = { BIN: 10, OCT: 30, DEC: 0, HEX: 40 };
|
|
16039
16128
|
function parseBase(value2, base) {
|
|
@@ -16067,7 +16156,7 @@ for (const from of Object.keys(BASES)) {
|
|
|
16067
16156
|
conversions.push(
|
|
16068
16157
|
spec(
|
|
16069
16158
|
name,
|
|
16070
|
-
|
|
16159
|
+
C8,
|
|
16071
16160
|
to === "DEC" ? `${name}(number)` : `${name}(number, [places])`,
|
|
16072
16161
|
`Converts a ${from.toLowerCase()} number to ${to.toLowerCase()}.`,
|
|
16073
16162
|
1,
|
|
@@ -16111,9 +16200,10 @@ var ENGINEERING_FUNCTIONS = [
|
|
|
16111
16200
|
...conversions,
|
|
16112
16201
|
...COMPLEX_FUNCTIONS,
|
|
16113
16202
|
...CONVERT_FUNCTIONS,
|
|
16203
|
+
...BESSEL_FUNCTIONS,
|
|
16114
16204
|
spec(
|
|
16115
16205
|
"BITAND",
|
|
16116
|
-
|
|
16206
|
+
C8,
|
|
16117
16207
|
"BITAND(number1, number2)",
|
|
16118
16208
|
"Bitwise AND.",
|
|
16119
16209
|
2,
|
|
@@ -16122,7 +16212,7 @@ var ENGINEERING_FUNCTIONS = [
|
|
|
16122
16212
|
),
|
|
16123
16213
|
spec(
|
|
16124
16214
|
"BITOR",
|
|
16125
|
-
|
|
16215
|
+
C8,
|
|
16126
16216
|
"BITOR(number1, number2)",
|
|
16127
16217
|
"Bitwise OR.",
|
|
16128
16218
|
2,
|
|
@@ -16131,24 +16221,24 @@ var ENGINEERING_FUNCTIONS = [
|
|
|
16131
16221
|
),
|
|
16132
16222
|
spec(
|
|
16133
16223
|
"BITXOR",
|
|
16134
|
-
|
|
16224
|
+
C8,
|
|
16135
16225
|
"BITXOR(number1, number2)",
|
|
16136
16226
|
"Bitwise XOR.",
|
|
16137
16227
|
2,
|
|
16138
16228
|
2,
|
|
16139
16229
|
(args) => bitwise(bitArg(args[0]), bitArg(args[1]), (x, y) => x ^ y)
|
|
16140
16230
|
),
|
|
16141
|
-
spec("BITLSHIFT",
|
|
16231
|
+
spec("BITLSHIFT", C8, "BITLSHIFT(number, shift_amount)", "Shifts bits left.", 2, 2, (args) => {
|
|
16142
16232
|
const out = Math.floor(bitArg(args[0]) * Math.pow(2, int3(args[1])));
|
|
16143
16233
|
return out >= 2 ** 48 ? fail(ERR.NUM) : out;
|
|
16144
16234
|
}),
|
|
16145
|
-
spec("BITRSHIFT",
|
|
16235
|
+
spec("BITRSHIFT", C8, "BITRSHIFT(number, shift_amount)", "Shifts bits right.", 2, 2, (args) => {
|
|
16146
16236
|
const out = Math.floor(bitArg(args[0]) / Math.pow(2, int3(args[1])));
|
|
16147
16237
|
return out >= 2 ** 48 ? fail(ERR.NUM) : out;
|
|
16148
16238
|
}),
|
|
16149
16239
|
numeric(
|
|
16150
16240
|
"DELTA",
|
|
16151
|
-
|
|
16241
|
+
C8,
|
|
16152
16242
|
"DELTA(number1, [number2])",
|
|
16153
16243
|
"1 when two numbers are equal, else 0.",
|
|
16154
16244
|
1,
|
|
@@ -16157,7 +16247,7 @@ var ENGINEERING_FUNCTIONS = [
|
|
|
16157
16247
|
),
|
|
16158
16248
|
numeric(
|
|
16159
16249
|
"GESTEP",
|
|
16160
|
-
|
|
16250
|
+
C8,
|
|
16161
16251
|
"GESTEP(number, [step])",
|
|
16162
16252
|
"1 when a number is at least step, else 0.",
|
|
16163
16253
|
1,
|
|
@@ -16243,7 +16333,7 @@ var ENGINEERING_FUNCTIONS = [
|
|
|
16243
16333
|
];
|
|
16244
16334
|
|
|
16245
16335
|
// xlsx/formula/functions/coupons.ts
|
|
16246
|
-
var
|
|
16336
|
+
var C9 = "Financial";
|
|
16247
16337
|
function checkSecurity(settlement, maturity, frequency2, basis) {
|
|
16248
16338
|
if (![1, 2, 4].includes(frequency2) || basis < 0 || basis > 4 || settlement >= maturity)
|
|
16249
16339
|
fail(ERR.NUM);
|
|
@@ -16271,7 +16361,7 @@ function couponFacts(settlement, maturity, frequency2, basis, ctx) {
|
|
|
16271
16361
|
}
|
|
16272
16362
|
var security = (name, description, pick2) => spec(
|
|
16273
16363
|
name,
|
|
16274
|
-
|
|
16364
|
+
C9,
|
|
16275
16365
|
`${name}(settlement, maturity, frequency, [basis])`,
|
|
16276
16366
|
description,
|
|
16277
16367
|
3,
|
|
@@ -16373,7 +16463,7 @@ function cumulative(args, principal) {
|
|
|
16373
16463
|
}
|
|
16374
16464
|
|
|
16375
16465
|
// xlsx/formula/functions/bonds.ts
|
|
16376
|
-
var
|
|
16466
|
+
var C10 = "Financial";
|
|
16377
16467
|
var basisOf = (args, index3) => {
|
|
16378
16468
|
const basis = args.length > index3 && args[index3] !== null ? int3(args[index3]) : 0;
|
|
16379
16469
|
if (basis < 0 || basis > 4) fail(ERR.NUM);
|
|
@@ -16441,21 +16531,21 @@ function accruedInterest(args, ctx) {
|
|
|
16441
16531
|
if (start >= settlement) return 0;
|
|
16442
16532
|
const dates = quasiPeriods(first2, start, settlement, frequency2, ctx);
|
|
16443
16533
|
const count2 = (a2, b) => basis === 0 || basis === 4 ? days360(a2, b, basis === 4, ctx) : b - a2;
|
|
16444
|
-
let
|
|
16534
|
+
let sum3 = 0;
|
|
16445
16535
|
for (let i2 = 0; i2 + 1 < dates.length; i2++) {
|
|
16446
16536
|
const [p, q] = [dates[i2], dates[i2 + 1]];
|
|
16447
16537
|
const a2 = count2(Math.max(start, p), Math.min(settlement, q));
|
|
16448
16538
|
if (a2 <= 0) continue;
|
|
16449
16539
|
const length = basis === 1 ? q - p : basis === 3 ? 365 / frequency2 : 360 / frequency2;
|
|
16450
|
-
|
|
16540
|
+
sum3 += a2 / length;
|
|
16451
16541
|
}
|
|
16452
|
-
return par * rate / frequency2 *
|
|
16542
|
+
return par * rate / frequency2 * sum3;
|
|
16453
16543
|
}
|
|
16454
16544
|
var BOND_ARGS = (name, third, fourth, fifth) => `${name}(settlement, maturity, ${third}, ${fourth}, ${fifth}, frequency, [basis])`;
|
|
16455
16545
|
var BOND_FUNCTIONS = [
|
|
16456
16546
|
spec(
|
|
16457
16547
|
"PRICE",
|
|
16458
|
-
|
|
16548
|
+
C10,
|
|
16459
16549
|
BOND_ARGS("PRICE", "rate", "yld", "redemption"),
|
|
16460
16550
|
"The price per 100 face value of a security that pays periodic interest.",
|
|
16461
16551
|
6,
|
|
@@ -16469,7 +16559,7 @@ var BOND_FUNCTIONS = [
|
|
|
16469
16559
|
),
|
|
16470
16560
|
spec(
|
|
16471
16561
|
"YIELD",
|
|
16472
|
-
|
|
16562
|
+
C10,
|
|
16473
16563
|
BOND_ARGS("YIELD", "rate", "pr", "redemption"),
|
|
16474
16564
|
"The yield of a security that pays periodic interest.",
|
|
16475
16565
|
6,
|
|
@@ -16485,7 +16575,7 @@ var BOND_FUNCTIONS = [
|
|
|
16485
16575
|
...["DURATION", "MDURATION"].map(
|
|
16486
16576
|
(name) => spec(
|
|
16487
16577
|
name,
|
|
16488
|
-
|
|
16578
|
+
C10,
|
|
16489
16579
|
`${name}(settlement, maturity, coupon, yld, frequency, [basis])`,
|
|
16490
16580
|
name === "DURATION" ? "The Macaulay duration of a security with periodic interest." : "The modified Macaulay duration of a security.",
|
|
16491
16581
|
5,
|
|
@@ -16508,7 +16598,7 @@ var BOND_FUNCTIONS = [
|
|
|
16508
16598
|
),
|
|
16509
16599
|
spec(
|
|
16510
16600
|
"ACCRINT",
|
|
16511
|
-
|
|
16601
|
+
C10,
|
|
16512
16602
|
"ACCRINT(issue, first_interest, settlement, rate, par, frequency, [basis], [calc_method])",
|
|
16513
16603
|
"The accrued interest of a security that pays periodic interest.",
|
|
16514
16604
|
6,
|
|
@@ -16517,7 +16607,7 @@ var BOND_FUNCTIONS = [
|
|
|
16517
16607
|
),
|
|
16518
16608
|
spec(
|
|
16519
16609
|
"ACCRINTM",
|
|
16520
|
-
|
|
16610
|
+
C10,
|
|
16521
16611
|
"ACCRINTM(issue, settlement, rate, [par], [basis])",
|
|
16522
16612
|
"The accrued interest of a security that pays interest at maturity.",
|
|
16523
16613
|
3,
|
|
@@ -16531,6 +16621,40 @@ var BOND_FUNCTIONS = [
|
|
|
16531
16621
|
)
|
|
16532
16622
|
];
|
|
16533
16623
|
|
|
16624
|
+
// xlsx/formula/functions/amordegrc.ts
|
|
16625
|
+
var round2 = (value2) => Math.floor(value2 + 0.5);
|
|
16626
|
+
var AMORDEGRC = spec(
|
|
16627
|
+
"AMORDEGRC",
|
|
16628
|
+
"Financial",
|
|
16629
|
+
"AMORDEGRC(cost, date_purchased, first_period, salvage, period, rate, [basis])",
|
|
16630
|
+
"Depreciation of each accounting period using a depreciation coefficient.",
|
|
16631
|
+
6,
|
|
16632
|
+
7,
|
|
16633
|
+
(args, ctx) => {
|
|
16634
|
+
let cost = num2(args[0]);
|
|
16635
|
+
const salvage = num2(args[3]);
|
|
16636
|
+
const period = Math.floor(num2(args[4]));
|
|
16637
|
+
let rate = num2(args[5]);
|
|
16638
|
+
const basis = Math.trunc(optNum(args, 6, 0));
|
|
16639
|
+
const purchase = Math.floor(serialArg(args[1]));
|
|
16640
|
+
const firstPeriod = Math.floor(serialArg(args[2]));
|
|
16641
|
+
if (cost <= 0 || salvage < 0 || salvage > cost || rate <= 0 || period < 0 || ![0, 1, 3, 4].includes(basis) || purchase > firstPeriod)
|
|
16642
|
+
fail(ERR.NUM);
|
|
16643
|
+
const life = 1 / rate;
|
|
16644
|
+
rate *= life < 3 ? 1 : life < 5 ? 1.5 : life <= 6 ? 2 : 2.5;
|
|
16645
|
+
let depreciation = round2(yearFrac(purchase, firstPeriod, basis, ctx) * rate * cost);
|
|
16646
|
+
cost -= depreciation;
|
|
16647
|
+
let rest = cost - salvage;
|
|
16648
|
+
for (let n = 0; n < period; n++) {
|
|
16649
|
+
depreciation = round2(rate * cost);
|
|
16650
|
+
rest -= depreciation;
|
|
16651
|
+
if (rest < 0) return period - n === 1 ? round2(cost * 0.5) : 0;
|
|
16652
|
+
cost -= depreciation;
|
|
16653
|
+
}
|
|
16654
|
+
return finite(depreciation);
|
|
16655
|
+
}
|
|
16656
|
+
);
|
|
16657
|
+
|
|
16534
16658
|
// xlsx/formula/functions/amorlinc.ts
|
|
16535
16659
|
var AMORLINC = {
|
|
16536
16660
|
...spec(
|
|
@@ -16565,8 +16689,168 @@ var AMORLINC = {
|
|
|
16565
16689
|
missingRequiredError: "#N/A"
|
|
16566
16690
|
};
|
|
16567
16691
|
|
|
16692
|
+
// xlsx/formula/functions/odd-securities.ts
|
|
16693
|
+
var C11 = "Financial";
|
|
16694
|
+
function calendar2(dates, frequency2, basis, ctx) {
|
|
16695
|
+
const count2 = (a2, b) => basis === 0 || basis === 4 ? days360(a2, b, basis === 4, ctx) : b - a2;
|
|
16696
|
+
return {
|
|
16697
|
+
fraction(a2, b) {
|
|
16698
|
+
let sum3 = 0;
|
|
16699
|
+
for (let i2 = 0; i2 + 1 < dates.length; i2++) {
|
|
16700
|
+
const [p, q] = [dates[i2], dates[i2 + 1]];
|
|
16701
|
+
const days = count2(Math.max(a2, p), Math.min(b, q));
|
|
16702
|
+
if (days <= 0) continue;
|
|
16703
|
+
sum3 += days / (basis === 1 ? q - p : basis === 3 ? 365 / frequency2 : 360 / frequency2);
|
|
16704
|
+
}
|
|
16705
|
+
return sum3;
|
|
16706
|
+
}
|
|
16707
|
+
};
|
|
16708
|
+
}
|
|
16709
|
+
function basisOf2(args, index3) {
|
|
16710
|
+
const basis = args.length > index3 && args[index3] !== null ? int3(args[index3]) : 0;
|
|
16711
|
+
if (basis < 0 || basis > 4) fail(ERR.NUM);
|
|
16712
|
+
return basis;
|
|
16713
|
+
}
|
|
16714
|
+
function frequencyOf(value2) {
|
|
16715
|
+
const frequency2 = int3(value2);
|
|
16716
|
+
if (![1, 2, 4].includes(frequency2)) fail(ERR.NUM);
|
|
16717
|
+
return frequency2;
|
|
16718
|
+
}
|
|
16719
|
+
function oddFirstPrice(s, yld, ctx) {
|
|
16720
|
+
const { settlement, maturity, issue, firstCoupon, rate, redemption, frequency: frequency2, basis } = s;
|
|
16721
|
+
const months = 12 / frequency2;
|
|
16722
|
+
const coupon = 100 * rate / frequency2;
|
|
16723
|
+
const quasi = calendar2(
|
|
16724
|
+
quasiPeriods(firstCoupon, issue, firstCoupon, frequency2, ctx),
|
|
16725
|
+
frequency2,
|
|
16726
|
+
basis,
|
|
16727
|
+
ctx
|
|
16728
|
+
);
|
|
16729
|
+
const toFirst = quasi.fraction(settlement, firstCoupon);
|
|
16730
|
+
const { year, month, day } = serialToYmd(firstCoupon, ctx.date1904);
|
|
16731
|
+
const monthEnd = day === daysInMonth(year, month);
|
|
16732
|
+
let n = 1;
|
|
16733
|
+
while (addMonths(firstCoupon, n * months, ctx, monthEnd) < maturity) n += 1;
|
|
16734
|
+
n += 1;
|
|
16735
|
+
const base = 1 + yld / frequency2;
|
|
16736
|
+
let price = redemption / base ** (toFirst + n - 1);
|
|
16737
|
+
price += coupon * quasi.fraction(issue, firstCoupon) / base ** toFirst;
|
|
16738
|
+
for (let k = 2; k <= n; k++) price += coupon / base ** (toFirst + k - 1);
|
|
16739
|
+
return price - coupon * quasi.fraction(issue, settlement);
|
|
16740
|
+
}
|
|
16741
|
+
function firstOf2(args) {
|
|
16742
|
+
const [settlement, maturity, issue, firstCoupon] = [0, 1, 2, 3].map(
|
|
16743
|
+
(i2) => Math.floor(serialArg(args[i2]))
|
|
16744
|
+
);
|
|
16745
|
+
const frequency2 = frequencyOf(args[7]);
|
|
16746
|
+
const first2 = {
|
|
16747
|
+
settlement,
|
|
16748
|
+
maturity,
|
|
16749
|
+
issue,
|
|
16750
|
+
firstCoupon,
|
|
16751
|
+
rate: num2(args[4]),
|
|
16752
|
+
redemption: num2(args[6]),
|
|
16753
|
+
frequency: frequency2,
|
|
16754
|
+
basis: basisOf2(args, 8)
|
|
16755
|
+
};
|
|
16756
|
+
if (!(maturity > firstCoupon && firstCoupon > settlement && settlement > issue)) fail(ERR.NUM);
|
|
16757
|
+
if (first2.rate < 0 || first2.redemption <= 0) fail(ERR.NUM);
|
|
16758
|
+
return first2;
|
|
16759
|
+
}
|
|
16760
|
+
function lastOf(args, ctx) {
|
|
16761
|
+
const [settlement, maturity, lastInterest] = [0, 1, 2].map(
|
|
16762
|
+
(i2) => Math.floor(serialArg(args[i2]))
|
|
16763
|
+
);
|
|
16764
|
+
const frequency2 = frequencyOf(args[6]);
|
|
16765
|
+
const last = {
|
|
16766
|
+
settlement,
|
|
16767
|
+
maturity,
|
|
16768
|
+
lastInterest,
|
|
16769
|
+
rate: num2(args[3]),
|
|
16770
|
+
redemption: num2(args[5]),
|
|
16771
|
+
frequency: frequency2,
|
|
16772
|
+
cal: calendar2(
|
|
16773
|
+
quasiPeriods(lastInterest, lastInterest, maturity, frequency2, ctx),
|
|
16774
|
+
frequency2,
|
|
16775
|
+
basisOf2(args, 7),
|
|
16776
|
+
ctx
|
|
16777
|
+
)
|
|
16778
|
+
};
|
|
16779
|
+
if (!(maturity > settlement && settlement > lastInterest)) fail(ERR.NUM);
|
|
16780
|
+
if (last.rate < 0 || last.redemption <= 0) fail(ERR.NUM);
|
|
16781
|
+
return last;
|
|
16782
|
+
}
|
|
16783
|
+
function oddLastPrice(l, yld) {
|
|
16784
|
+
const coupon = 100 * l.rate / l.frequency;
|
|
16785
|
+
const full = l.redemption + coupon * l.cal.fraction(l.lastInterest, l.maturity);
|
|
16786
|
+
const discount2 = 1 + yld / l.frequency * l.cal.fraction(l.settlement, l.maturity);
|
|
16787
|
+
return full / discount2 - coupon * l.cal.fraction(l.lastInterest, l.settlement);
|
|
16788
|
+
}
|
|
16789
|
+
var ODD_SECURITY_FUNCTIONS = [
|
|
16790
|
+
spec(
|
|
16791
|
+
"ODDFPRICE",
|
|
16792
|
+
C11,
|
|
16793
|
+
"ODDFPRICE(settlement, maturity, issue, first_coupon, rate, yld, redemption, frequency, [basis])",
|
|
16794
|
+
"The price per 100 face value of a security with an odd first period.",
|
|
16795
|
+
8,
|
|
16796
|
+
9,
|
|
16797
|
+
(args, ctx) => {
|
|
16798
|
+
const first2 = firstOf2(args);
|
|
16799
|
+
const yld = num2(args[5]);
|
|
16800
|
+
if (yld < 0) fail(ERR.NUM);
|
|
16801
|
+
return oddFirstPrice(first2, yld, ctx);
|
|
16802
|
+
}
|
|
16803
|
+
),
|
|
16804
|
+
spec(
|
|
16805
|
+
"ODDFYIELD",
|
|
16806
|
+
C11,
|
|
16807
|
+
"ODDFYIELD(settlement, maturity, issue, first_coupon, rate, pr, redemption, frequency, [basis])",
|
|
16808
|
+
"The yield of a security with an odd first period.",
|
|
16809
|
+
8,
|
|
16810
|
+
9,
|
|
16811
|
+
(args, ctx) => {
|
|
16812
|
+
const first2 = firstOf2(args);
|
|
16813
|
+
const price = num2(args[5]);
|
|
16814
|
+
if (price <= 0) fail(ERR.NUM);
|
|
16815
|
+
return solve((y) => oddFirstPrice(first2, y, ctx) - price, first2.rate || 0.05);
|
|
16816
|
+
}
|
|
16817
|
+
),
|
|
16818
|
+
spec(
|
|
16819
|
+
"ODDLPRICE",
|
|
16820
|
+
C11,
|
|
16821
|
+
"ODDLPRICE(settlement, maturity, last_interest, rate, yld, redemption, frequency, [basis])",
|
|
16822
|
+
"The price per 100 face value of a security with an odd last period.",
|
|
16823
|
+
7,
|
|
16824
|
+
8,
|
|
16825
|
+
(args, ctx) => {
|
|
16826
|
+
const last = lastOf(args, ctx);
|
|
16827
|
+
const yld = num2(args[4]);
|
|
16828
|
+
if (yld < 0) fail(ERR.NUM);
|
|
16829
|
+
return oddLastPrice(last, yld);
|
|
16830
|
+
}
|
|
16831
|
+
),
|
|
16832
|
+
spec(
|
|
16833
|
+
"ODDLYIELD",
|
|
16834
|
+
C11,
|
|
16835
|
+
"ODDLYIELD(settlement, maturity, last_interest, rate, pr, redemption, frequency, [basis])",
|
|
16836
|
+
"The yield of a security with an odd last period.",
|
|
16837
|
+
7,
|
|
16838
|
+
8,
|
|
16839
|
+
(args, ctx) => {
|
|
16840
|
+
const last = lastOf(args, ctx);
|
|
16841
|
+
const price = num2(args[4]);
|
|
16842
|
+
if (price <= 0) fail(ERR.NUM);
|
|
16843
|
+
const coupon = 100 * last.rate / last.frequency;
|
|
16844
|
+
const cal = last.cal;
|
|
16845
|
+
const dirty = price + coupon * cal.fraction(last.lastInterest, last.settlement);
|
|
16846
|
+
const full = last.redemption + coupon * cal.fraction(last.lastInterest, last.maturity);
|
|
16847
|
+
return (full - dirty) / dirty * (last.frequency / cal.fraction(last.settlement, last.maturity));
|
|
16848
|
+
}
|
|
16849
|
+
)
|
|
16850
|
+
];
|
|
16851
|
+
|
|
16568
16852
|
// xlsx/formula/functions/depreciation.ts
|
|
16569
|
-
var
|
|
16853
|
+
var C12 = "Financial";
|
|
16570
16854
|
function variableDeclining(cost, salvage, life, start, end, factor, noSwitch) {
|
|
16571
16855
|
let book = cost;
|
|
16572
16856
|
let total2 = 0;
|
|
@@ -16584,7 +16868,7 @@ function variableDeclining(cost, salvage, life, start, end, factor, noSwitch) {
|
|
|
16584
16868
|
var DEPRECIATION_FUNCTIONS = [
|
|
16585
16869
|
numeric(
|
|
16586
16870
|
"SLN",
|
|
16587
|
-
|
|
16871
|
+
C12,
|
|
16588
16872
|
"SLN(cost, salvage, life)",
|
|
16589
16873
|
"Straight-line depreciation.",
|
|
16590
16874
|
3,
|
|
@@ -16593,7 +16877,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16593
16877
|
),
|
|
16594
16878
|
numeric(
|
|
16595
16879
|
"SYD",
|
|
16596
|
-
|
|
16880
|
+
C12,
|
|
16597
16881
|
"SYD(cost, salvage, life, per)",
|
|
16598
16882
|
"Sum-of-years' digits depreciation.",
|
|
16599
16883
|
4,
|
|
@@ -16605,7 +16889,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16605
16889
|
),
|
|
16606
16890
|
numeric(
|
|
16607
16891
|
"DDB",
|
|
16608
|
-
|
|
16892
|
+
C12,
|
|
16609
16893
|
"DDB(cost, salvage, life, period, [factor])",
|
|
16610
16894
|
"Double-declining balance depreciation.",
|
|
16611
16895
|
4,
|
|
@@ -16619,7 +16903,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16619
16903
|
),
|
|
16620
16904
|
spec(
|
|
16621
16905
|
"VDB",
|
|
16622
|
-
|
|
16906
|
+
C12,
|
|
16623
16907
|
"VDB(cost, salvage, life, start_period, end_period, [factor], [no_switch])",
|
|
16624
16908
|
"Depreciation over any span of periods, switching to straight-line when that is larger.",
|
|
16625
16909
|
5,
|
|
@@ -16643,7 +16927,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16643
16927
|
),
|
|
16644
16928
|
numeric(
|
|
16645
16929
|
"DB",
|
|
16646
|
-
|
|
16930
|
+
C12,
|
|
16647
16931
|
"DB(cost, salvage, life, period, [month])",
|
|
16648
16932
|
"Fixed-declining balance depreciation.",
|
|
16649
16933
|
4,
|
|
@@ -16662,7 +16946,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16662
16946
|
),
|
|
16663
16947
|
numeric(
|
|
16664
16948
|
"EFFECT",
|
|
16665
|
-
|
|
16949
|
+
C12,
|
|
16666
16950
|
"EFFECT(nominal_rate, npery)",
|
|
16667
16951
|
"The effective annual interest rate.",
|
|
16668
16952
|
2,
|
|
@@ -16675,7 +16959,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16675
16959
|
),
|
|
16676
16960
|
numeric(
|
|
16677
16961
|
"NOMINAL",
|
|
16678
|
-
|
|
16962
|
+
C12,
|
|
16679
16963
|
"NOMINAL(effect_rate, npery)",
|
|
16680
16964
|
"The nominal annual interest rate.",
|
|
16681
16965
|
2,
|
|
@@ -16688,7 +16972,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16688
16972
|
),
|
|
16689
16973
|
numeric(
|
|
16690
16974
|
"CUMIPMT",
|
|
16691
|
-
|
|
16975
|
+
C12,
|
|
16692
16976
|
"CUMIPMT(rate, nper, pv, start_period, end_period, type)",
|
|
16693
16977
|
"Cumulative interest paid between periods.",
|
|
16694
16978
|
6,
|
|
@@ -16697,7 +16981,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16697
16981
|
),
|
|
16698
16982
|
numeric(
|
|
16699
16983
|
"CUMPRINC",
|
|
16700
|
-
|
|
16984
|
+
C12,
|
|
16701
16985
|
"CUMPRINC(rate, nper, pv, start_period, end_period, type)",
|
|
16702
16986
|
"Cumulative principal paid between periods.",
|
|
16703
16987
|
6,
|
|
@@ -16706,7 +16990,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16706
16990
|
),
|
|
16707
16991
|
numeric(
|
|
16708
16992
|
"ISPMT",
|
|
16709
|
-
|
|
16993
|
+
C12,
|
|
16710
16994
|
"ISPMT(rate, per, nper, pv)",
|
|
16711
16995
|
"Interest paid in a period of a straight-line loan.",
|
|
16712
16996
|
4,
|
|
@@ -16718,7 +17002,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16718
17002
|
),
|
|
16719
17003
|
numeric(
|
|
16720
17004
|
"PDURATION",
|
|
16721
|
-
|
|
17005
|
+
C12,
|
|
16722
17006
|
"PDURATION(rate, pv, fv)",
|
|
16723
17007
|
"Periods required to reach a value.",
|
|
16724
17008
|
3,
|
|
@@ -16730,7 +17014,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16730
17014
|
),
|
|
16731
17015
|
numeric(
|
|
16732
17016
|
"RRI",
|
|
16733
|
-
|
|
17017
|
+
C12,
|
|
16734
17018
|
"RRI(nper, pv, fv)",
|
|
16735
17019
|
"An equivalent interest rate for growth.",
|
|
16736
17020
|
3,
|
|
@@ -16742,7 +17026,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16742
17026
|
),
|
|
16743
17027
|
spec(
|
|
16744
17028
|
"FVSCHEDULE",
|
|
16745
|
-
|
|
17029
|
+
C12,
|
|
16746
17030
|
"FVSCHEDULE(principal, schedule)",
|
|
16747
17031
|
"Future value with a schedule of rates.",
|
|
16748
17032
|
2,
|
|
@@ -16752,7 +17036,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16752
17036
|
),
|
|
16753
17037
|
numeric(
|
|
16754
17038
|
"DOLLARDE",
|
|
16755
|
-
|
|
17039
|
+
C12,
|
|
16756
17040
|
"DOLLARDE(fractional_dollar, fraction)",
|
|
16757
17041
|
"Converts a fractional price to a decimal.",
|
|
16758
17042
|
2,
|
|
@@ -16768,7 +17052,7 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16768
17052
|
),
|
|
16769
17053
|
numeric(
|
|
16770
17054
|
"DOLLARFR",
|
|
16771
|
-
|
|
17055
|
+
C12,
|
|
16772
17056
|
"DOLLARFR(decimal_dollar, fraction)",
|
|
16773
17057
|
"Converts a decimal price to a fraction.",
|
|
16774
17058
|
2,
|
|
@@ -16785,8 +17069,8 @@ var DEPRECIATION_FUNCTIONS = [
|
|
|
16785
17069
|
];
|
|
16786
17070
|
|
|
16787
17071
|
// xlsx/formula/functions/securities.ts
|
|
16788
|
-
var
|
|
16789
|
-
var
|
|
17072
|
+
var C13 = "Financial";
|
|
17073
|
+
var basisOf3 = (args, index3) => {
|
|
16790
17074
|
const basis = args.length > index3 && args[index3] !== null ? int3(args[index3]) : 0;
|
|
16791
17075
|
if (basis < 0 || basis > 4) fail(ERR.NUM);
|
|
16792
17076
|
return basis;
|
|
@@ -16799,17 +17083,17 @@ function span(args) {
|
|
|
16799
17083
|
var positive = (...values2) => {
|
|
16800
17084
|
for (const v of values2) if (!(v > 0)) fail(ERR.NUM);
|
|
16801
17085
|
};
|
|
16802
|
-
var discount = (name, description, syntax, fn) => spec(name,
|
|
17086
|
+
var discount = (name, description, syntax, fn) => spec(name, C13, syntax, description, 4, 5, (args, ctx) => {
|
|
16803
17087
|
const { s, m } = span(args);
|
|
16804
17088
|
const [a2, b] = [num2(args[2]), num2(args[3])];
|
|
16805
17089
|
positive(a2, b);
|
|
16806
|
-
return fn(a2, b, yearFrac(s, m,
|
|
17090
|
+
return fn(a2, b, yearFrac(s, m, basisOf3(args, 4), ctx));
|
|
16807
17091
|
});
|
|
16808
|
-
var atMaturity = (name, description, syntax, fn) => spec(name,
|
|
17092
|
+
var atMaturity = (name, description, syntax, fn) => spec(name, C13, syntax, description, 5, 6, (args, ctx) => {
|
|
16809
17093
|
const { s, m } = span(args);
|
|
16810
17094
|
const issue = Math.floor(serialArg(args[2]));
|
|
16811
17095
|
const [rate, other] = [num2(args[3]), num2(args[4])];
|
|
16812
|
-
const basis =
|
|
17096
|
+
const basis = basisOf3(args, 5);
|
|
16813
17097
|
if (issue > s || rate < 0 || other < 0) fail(ERR.NUM);
|
|
16814
17098
|
return fn(
|
|
16815
17099
|
rate,
|
|
@@ -16870,7 +17154,7 @@ var SECURITY_FUNCTIONS = [
|
|
|
16870
17154
|
),
|
|
16871
17155
|
spec(
|
|
16872
17156
|
"TBILLPRICE",
|
|
16873
|
-
|
|
17157
|
+
C13,
|
|
16874
17158
|
"TBILLPRICE(settlement, maturity, discount)",
|
|
16875
17159
|
"The price per 100 face value of a Treasury bill.",
|
|
16876
17160
|
3,
|
|
@@ -16885,7 +17169,7 @@ var SECURITY_FUNCTIONS = [
|
|
|
16885
17169
|
),
|
|
16886
17170
|
spec(
|
|
16887
17171
|
"TBILLYIELD",
|
|
16888
|
-
|
|
17172
|
+
C13,
|
|
16889
17173
|
"TBILLYIELD(settlement, maturity, pr)",
|
|
16890
17174
|
"The yield of a Treasury bill.",
|
|
16891
17175
|
3,
|
|
@@ -16899,7 +17183,7 @@ var SECURITY_FUNCTIONS = [
|
|
|
16899
17183
|
),
|
|
16900
17184
|
spec(
|
|
16901
17185
|
"TBILLEQ",
|
|
16902
|
-
|
|
17186
|
+
C13,
|
|
16903
17187
|
"TBILLEQ(settlement, maturity, discount)",
|
|
16904
17188
|
"The bond-equivalent yield of a Treasury bill.",
|
|
16905
17189
|
3,
|
|
@@ -16918,7 +17202,7 @@ var SECURITY_FUNCTIONS = [
|
|
|
16918
17202
|
];
|
|
16919
17203
|
|
|
16920
17204
|
// xlsx/formula/functions/financial.ts
|
|
16921
|
-
var
|
|
17205
|
+
var C15 = "Financial";
|
|
16922
17206
|
var npv = (rate, values2) => values2.reduce((acc, v, i2) => acc + v / Math.pow(1 + rate, i2 + 1), 0);
|
|
16923
17207
|
function datedFlows(ctx, args) {
|
|
16924
17208
|
const values2 = collectNumbers(ctx, [args[0] ?? null]);
|
|
@@ -16933,14 +17217,16 @@ var xnpv = (rate, values2, dates) => values2.reduce(
|
|
|
16933
17217
|
0
|
|
16934
17218
|
);
|
|
16935
17219
|
var FINANCIAL_FUNCTIONS = [
|
|
17220
|
+
AMORDEGRC,
|
|
16936
17221
|
AMORLINC,
|
|
17222
|
+
...ODD_SECURITY_FUNCTIONS,
|
|
16937
17223
|
...DEPRECIATION_FUNCTIONS,
|
|
16938
17224
|
...COUPON_FUNCTIONS,
|
|
16939
17225
|
...BOND_FUNCTIONS,
|
|
16940
17226
|
...SECURITY_FUNCTIONS,
|
|
16941
17227
|
numeric(
|
|
16942
17228
|
"PMT",
|
|
16943
|
-
|
|
17229
|
+
C15,
|
|
16944
17230
|
"PMT(rate, nper, pv, [fv], [type])",
|
|
16945
17231
|
"The payment for a loan.",
|
|
16946
17232
|
3,
|
|
@@ -16949,7 +17235,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
16949
17235
|
),
|
|
16950
17236
|
numeric(
|
|
16951
17237
|
"FV",
|
|
16952
|
-
|
|
17238
|
+
C15,
|
|
16953
17239
|
"FV(rate, nper, pmt, [pv], [type])",
|
|
16954
17240
|
"The future value of an investment.",
|
|
16955
17241
|
3,
|
|
@@ -16958,7 +17244,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
16958
17244
|
),
|
|
16959
17245
|
numeric(
|
|
16960
17246
|
"PV",
|
|
16961
|
-
|
|
17247
|
+
C15,
|
|
16962
17248
|
"PV(rate, nper, pmt, [fv], [type])",
|
|
16963
17249
|
"The present value of an investment.",
|
|
16964
17250
|
3,
|
|
@@ -16967,7 +17253,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
16967
17253
|
),
|
|
16968
17254
|
numeric(
|
|
16969
17255
|
"NPER",
|
|
16970
|
-
|
|
17256
|
+
C15,
|
|
16971
17257
|
"NPER(rate, pmt, pv, [fv], [type])",
|
|
16972
17258
|
"The number of periods for an investment.",
|
|
16973
17259
|
3,
|
|
@@ -16984,7 +17270,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
16984
17270
|
),
|
|
16985
17271
|
numeric(
|
|
16986
17272
|
"IPMT",
|
|
16987
|
-
|
|
17273
|
+
C15,
|
|
16988
17274
|
"IPMT(rate, per, nper, pv, [fv], [type])",
|
|
16989
17275
|
"The interest part of a payment.",
|
|
16990
17276
|
4,
|
|
@@ -16993,7 +17279,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
16993
17279
|
),
|
|
16994
17280
|
numeric(
|
|
16995
17281
|
"PPMT",
|
|
16996
|
-
|
|
17282
|
+
C15,
|
|
16997
17283
|
"PPMT(rate, per, nper, pv, [fv], [type])",
|
|
16998
17284
|
"The principal part of a payment.",
|
|
16999
17285
|
4,
|
|
@@ -17002,7 +17288,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17002
17288
|
),
|
|
17003
17289
|
numeric(
|
|
17004
17290
|
"RATE",
|
|
17005
|
-
|
|
17291
|
+
C15,
|
|
17006
17292
|
"RATE(nper, pmt, pv, [fv], [type], [guess])",
|
|
17007
17293
|
"The interest rate per period.",
|
|
17008
17294
|
3,
|
|
@@ -17015,7 +17301,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17015
17301
|
),
|
|
17016
17302
|
spec(
|
|
17017
17303
|
"NPV",
|
|
17018
|
-
|
|
17304
|
+
C15,
|
|
17019
17305
|
"NPV(rate, value1, [value2], ...)",
|
|
17020
17306
|
"The net present value of cash flows.",
|
|
17021
17307
|
2,
|
|
@@ -17025,7 +17311,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17025
17311
|
),
|
|
17026
17312
|
spec(
|
|
17027
17313
|
"IRR",
|
|
17028
|
-
|
|
17314
|
+
C15,
|
|
17029
17315
|
"IRR(values, [guess])",
|
|
17030
17316
|
"The internal rate of return.",
|
|
17031
17317
|
1,
|
|
@@ -17042,7 +17328,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17042
17328
|
),
|
|
17043
17329
|
spec(
|
|
17044
17330
|
"XNPV",
|
|
17045
|
-
|
|
17331
|
+
C15,
|
|
17046
17332
|
"XNPV(rate, values, dates)",
|
|
17047
17333
|
"The net present value of dated cash flows.",
|
|
17048
17334
|
3,
|
|
@@ -17055,7 +17341,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17055
17341
|
),
|
|
17056
17342
|
spec(
|
|
17057
17343
|
"XIRR",
|
|
17058
|
-
|
|
17344
|
+
C15,
|
|
17059
17345
|
"XIRR(values, dates, [guess])",
|
|
17060
17346
|
"The internal rate of return of dated cash flows.",
|
|
17061
17347
|
2,
|
|
@@ -17069,7 +17355,7 @@ var FINANCIAL_FUNCTIONS = [
|
|
|
17069
17355
|
),
|
|
17070
17356
|
spec(
|
|
17071
17357
|
"MIRR",
|
|
17072
|
-
|
|
17358
|
+
C15,
|
|
17073
17359
|
"MIRR(values, finance_rate, reinvest_rate)",
|
|
17074
17360
|
"The modified internal rate of return.",
|
|
17075
17361
|
3,
|
|
@@ -17099,7 +17385,7 @@ function sheetIndex(host, name) {
|
|
|
17099
17385
|
}
|
|
17100
17386
|
|
|
17101
17387
|
// xlsx/formula/functions/info.ts
|
|
17102
|
-
var
|
|
17388
|
+
var C16 = "Information";
|
|
17103
17389
|
var ERROR_NUMBERS = {
|
|
17104
17390
|
"#NULL!": 1,
|
|
17105
17391
|
"#DIV/0!": 2,
|
|
@@ -17112,7 +17398,7 @@ var ERROR_NUMBERS = {
|
|
|
17112
17398
|
"#SPILL!": 9,
|
|
17113
17399
|
"#CALC!": 14
|
|
17114
17400
|
};
|
|
17115
|
-
var is = (name, syntax, description, test) => spec(name,
|
|
17401
|
+
var is = (name, syntax, description, test) => spec(name, C16, syntax, description, 1, 1, (args) => test(scalar(args[0])));
|
|
17116
17402
|
var parity = (v, odd) => {
|
|
17117
17403
|
if (isError(v)) fail(v);
|
|
17118
17404
|
if (typeof v === "boolean") fail(ERR.VALUE);
|
|
@@ -17149,7 +17435,7 @@ var INFO_FUNCTIONS = [
|
|
|
17149
17435
|
is("ISODD", "ISODD(number)", "TRUE for odd numbers.", (v) => parity(v, true)),
|
|
17150
17436
|
spec(
|
|
17151
17437
|
"ISREF",
|
|
17152
|
-
|
|
17438
|
+
C16,
|
|
17153
17439
|
"ISREF(value)",
|
|
17154
17440
|
"TRUE for references.",
|
|
17155
17441
|
1,
|
|
@@ -17159,7 +17445,7 @@ var INFO_FUNCTIONS = [
|
|
|
17159
17445
|
),
|
|
17160
17446
|
spec(
|
|
17161
17447
|
"ISFORMULA",
|
|
17162
|
-
|
|
17448
|
+
C16,
|
|
17163
17449
|
"ISFORMULA(reference)",
|
|
17164
17450
|
"TRUE when a cell holds a formula.",
|
|
17165
17451
|
1,
|
|
@@ -17173,17 +17459,17 @@ var INFO_FUNCTIONS = [
|
|
|
17173
17459
|
},
|
|
17174
17460
|
["any"]
|
|
17175
17461
|
),
|
|
17176
|
-
spec("N",
|
|
17462
|
+
spec("N", C16, "N(value)", "A value converted to a number (text is 0).", 1, 1, (args) => {
|
|
17177
17463
|
const v = scalar(args[0]);
|
|
17178
17464
|
if (isError(v)) return v;
|
|
17179
17465
|
if (typeof v === "number") return v;
|
|
17180
17466
|
if (typeof v === "boolean") return v ? 1 : 0;
|
|
17181
17467
|
return 0;
|
|
17182
17468
|
}),
|
|
17183
|
-
spec("NA",
|
|
17469
|
+
spec("NA", C16, "NA()", "The #N/A error value.", 0, 0, () => ERR.NA),
|
|
17184
17470
|
spec(
|
|
17185
17471
|
"TYPE",
|
|
17186
|
-
|
|
17472
|
+
C16,
|
|
17187
17473
|
"TYPE(value)",
|
|
17188
17474
|
"The type of a value: 1 number, 2 text, 4 logical, 16 error, 64 array.",
|
|
17189
17475
|
1,
|
|
@@ -17195,13 +17481,13 @@ var INFO_FUNCTIONS = [
|
|
|
17195
17481
|
},
|
|
17196
17482
|
["any"]
|
|
17197
17483
|
),
|
|
17198
|
-
spec("ERROR.TYPE",
|
|
17484
|
+
spec("ERROR.TYPE", C16, "ERROR.TYPE(error_val)", "The number of an error value.", 1, 1, (args) => {
|
|
17199
17485
|
const v = scalar(args[0]);
|
|
17200
17486
|
return isError(v) ? ERROR_NUMBERS[v.error] ?? ERR.NA : ERR.NA;
|
|
17201
17487
|
}),
|
|
17202
17488
|
spec(
|
|
17203
17489
|
"SHEET",
|
|
17204
|
-
|
|
17490
|
+
C16,
|
|
17205
17491
|
"SHEET([value])",
|
|
17206
17492
|
"The sheet number of a reference or sheet name.",
|
|
17207
17493
|
0,
|
|
@@ -17217,7 +17503,7 @@ var INFO_FUNCTIONS = [
|
|
|
17217
17503
|
),
|
|
17218
17504
|
spec(
|
|
17219
17505
|
"SHEETS",
|
|
17220
|
-
|
|
17506
|
+
C16,
|
|
17221
17507
|
"SHEETS([reference])",
|
|
17222
17508
|
"The number of sheets in a reference (or the workbook).",
|
|
17223
17509
|
0,
|
|
@@ -17232,7 +17518,7 @@ var INFO_FUNCTIONS = [
|
|
|
17232
17518
|
),
|
|
17233
17519
|
spec(
|
|
17234
17520
|
"CELL",
|
|
17235
|
-
|
|
17521
|
+
C16,
|
|
17236
17522
|
"CELL(info_type, [reference])",
|
|
17237
17523
|
"Information about a cell (address, row, col, contents, type, filename, sheet).",
|
|
17238
17524
|
1,
|
|
@@ -17318,7 +17604,7 @@ function broadcastShape(operands, at) {
|
|
|
17318
17604
|
}
|
|
17319
17605
|
|
|
17320
17606
|
// xlsx/formula/functions/lambda.ts
|
|
17321
|
-
var
|
|
17607
|
+
var C17 = "Logical";
|
|
17322
17608
|
function lambdaArg(value2) {
|
|
17323
17609
|
if (!(value2 instanceof LambdaValue)) fail(ERR.VALUE);
|
|
17324
17610
|
return value2;
|
|
@@ -17335,7 +17621,7 @@ function element(ctx, value2) {
|
|
|
17335
17621
|
var LAMBDA_HELPERS = [
|
|
17336
17622
|
spec(
|
|
17337
17623
|
"MAP",
|
|
17338
|
-
|
|
17624
|
+
C17,
|
|
17339
17625
|
"MAP(array1, ..., lambda)",
|
|
17340
17626
|
"Applies a LAMBDA to each value of arrays.",
|
|
17341
17627
|
2,
|
|
@@ -17361,7 +17647,7 @@ var LAMBDA_HELPERS = [
|
|
|
17361
17647
|
),
|
|
17362
17648
|
spec(
|
|
17363
17649
|
"REDUCE",
|
|
17364
|
-
|
|
17650
|
+
C17,
|
|
17365
17651
|
"REDUCE([initial_value], array, lambda)",
|
|
17366
17652
|
"Reduces an array to an accumulated value.",
|
|
17367
17653
|
2,
|
|
@@ -17377,7 +17663,7 @@ var LAMBDA_HELPERS = [
|
|
|
17377
17663
|
),
|
|
17378
17664
|
spec(
|
|
17379
17665
|
"SCAN",
|
|
17380
|
-
|
|
17666
|
+
C17,
|
|
17381
17667
|
"SCAN([initial_value], array, lambda)",
|
|
17382
17668
|
"The intermediate values of a reduction, as an array.",
|
|
17383
17669
|
2,
|
|
@@ -17395,7 +17681,7 @@ var LAMBDA_HELPERS = [
|
|
|
17395
17681
|
),
|
|
17396
17682
|
spec(
|
|
17397
17683
|
"BYROW",
|
|
17398
|
-
|
|
17684
|
+
C17,
|
|
17399
17685
|
"BYROW(array, lambda)",
|
|
17400
17686
|
"Applies a LAMBDA to each row, returning a column.",
|
|
17401
17687
|
2,
|
|
@@ -17411,7 +17697,7 @@ var LAMBDA_HELPERS = [
|
|
|
17411
17697
|
),
|
|
17412
17698
|
spec(
|
|
17413
17699
|
"BYCOL",
|
|
17414
|
-
|
|
17700
|
+
C17,
|
|
17415
17701
|
"BYCOL(array, lambda)",
|
|
17416
17702
|
"Applies a LAMBDA to each column, returning a row.",
|
|
17417
17703
|
2,
|
|
@@ -17421,8 +17707,8 @@ var LAMBDA_HELPERS = [
|
|
|
17421
17707
|
const array = ctx.toMatrix(args[0] ?? null);
|
|
17422
17708
|
const out = [];
|
|
17423
17709
|
for (let c2 = 0; c2 < array.cols; c2++) {
|
|
17424
|
-
const
|
|
17425
|
-
out.push(element(ctx, ctx.callLambda(fn, [
|
|
17710
|
+
const column2 = new Matrix(array.data.map((row2) => [row2[c2] ?? null]));
|
|
17711
|
+
out.push(element(ctx, ctx.callLambda(fn, [column2])));
|
|
17426
17712
|
}
|
|
17427
17713
|
return new Matrix([out]);
|
|
17428
17714
|
},
|
|
@@ -17430,7 +17716,7 @@ var LAMBDA_HELPERS = [
|
|
|
17430
17716
|
),
|
|
17431
17717
|
spec(
|
|
17432
17718
|
"MAKEARRAY",
|
|
17433
|
-
|
|
17719
|
+
C17,
|
|
17434
17720
|
"MAKEARRAY(rows, columns, lambda)",
|
|
17435
17721
|
"An array built by calling a LAMBDA for each position.",
|
|
17436
17722
|
3,
|
|
@@ -17447,7 +17733,7 @@ var LAMBDA_HELPERS = [
|
|
|
17447
17733
|
];
|
|
17448
17734
|
|
|
17449
17735
|
// xlsx/formula/functions/logical.ts
|
|
17450
|
-
var
|
|
17736
|
+
var C18 = "Logical";
|
|
17451
17737
|
function deref(ctx, value2) {
|
|
17452
17738
|
if (value2 instanceof RefValue) {
|
|
17453
17739
|
if (value2.isCell()) {
|
|
@@ -17517,7 +17803,7 @@ function logicalValues(ctx, args) {
|
|
|
17517
17803
|
if (out.length === 0) fail(ERR.VALUE);
|
|
17518
17804
|
return out;
|
|
17519
17805
|
}
|
|
17520
|
-
var lazySpec = (name, syntax, description, minArgs, maxArgs,
|
|
17806
|
+
var lazySpec = (name, syntax, description, minArgs, maxArgs, lazy2, category = C18) => ({ name, category, syntax, description, minArgs, maxArgs, lazy: lazy2 });
|
|
17521
17807
|
function localName(arg) {
|
|
17522
17808
|
const node = arg?.node;
|
|
17523
17809
|
if (!node || node.type !== "name" || node.prefix) fail(ERR.VALUE);
|
|
@@ -17611,7 +17897,7 @@ var LOGICAL_FUNCTIONS = [
|
|
|
17611
17897
|
),
|
|
17612
17898
|
{
|
|
17613
17899
|
name: "NOT",
|
|
17614
|
-
category:
|
|
17900
|
+
category: C18,
|
|
17615
17901
|
syntax: "NOT(logical)",
|
|
17616
17902
|
description: "Reverses a logical value.",
|
|
17617
17903
|
minArgs: 1,
|
|
@@ -17620,7 +17906,7 @@ var LOGICAL_FUNCTIONS = [
|
|
|
17620
17906
|
},
|
|
17621
17907
|
{
|
|
17622
17908
|
name: "TRUE",
|
|
17623
|
-
category:
|
|
17909
|
+
category: C18,
|
|
17624
17910
|
syntax: "TRUE()",
|
|
17625
17911
|
description: "The logical value TRUE.",
|
|
17626
17912
|
minArgs: 0,
|
|
@@ -17629,7 +17915,7 @@ var LOGICAL_FUNCTIONS = [
|
|
|
17629
17915
|
},
|
|
17630
17916
|
{
|
|
17631
17917
|
name: "FALSE",
|
|
17632
|
-
category:
|
|
17918
|
+
category: C18,
|
|
17633
17919
|
syntax: "FALSE()",
|
|
17634
17920
|
description: "The logical value FALSE.",
|
|
17635
17921
|
minArgs: 0,
|
|
@@ -17664,6 +17950,18 @@ var LOGICAL_FUNCTIONS = [
|
|
|
17664
17950
|
const params = args.slice(0, -1).map((a2) => localName(a2));
|
|
17665
17951
|
return new LambdaValue(params, args[args.length - 1].node, ctx.frame.scope);
|
|
17666
17952
|
}
|
|
17953
|
+
),
|
|
17954
|
+
lazySpec(
|
|
17955
|
+
"ISOMITTED",
|
|
17956
|
+
"ISOMITTED(argument)",
|
|
17957
|
+
"Whether a LAMBDA argument was left out.",
|
|
17958
|
+
1,
|
|
17959
|
+
1,
|
|
17960
|
+
(args, ctx) => {
|
|
17961
|
+
const node = args[0].node;
|
|
17962
|
+
if (node.type !== "name") return ERR.VALUE;
|
|
17963
|
+
return ctx.frame.scope?.get(OMITTED_PREFIX + normalizeLocalName(node.name)) === true;
|
|
17964
|
+
}
|
|
17667
17965
|
)
|
|
17668
17966
|
];
|
|
17669
17967
|
|
|
@@ -17896,7 +18194,7 @@ function parseR1C1Range(text, base) {
|
|
|
17896
18194
|
}
|
|
17897
18195
|
|
|
17898
18196
|
// xlsx/formula/functions/reference.ts
|
|
17899
|
-
var
|
|
18197
|
+
var C19 = "Lookup & Reference";
|
|
17900
18198
|
function refArg(value2) {
|
|
17901
18199
|
if (value2 instanceof RefValue) return value2;
|
|
17902
18200
|
if (isError(value2)) fail(value2);
|
|
@@ -17970,7 +18268,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
17970
18268
|
{
|
|
17971
18269
|
...spec(
|
|
17972
18270
|
"OFFSET",
|
|
17973
|
-
|
|
18271
|
+
C19,
|
|
17974
18272
|
"OFFSET(reference, rows, cols, [height], [width])",
|
|
17975
18273
|
"A reference offset from a starting reference.",
|
|
17976
18274
|
3,
|
|
@@ -17986,7 +18284,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
17986
18284
|
},
|
|
17987
18285
|
spec(
|
|
17988
18286
|
"INDIRECT",
|
|
17989
|
-
|
|
18287
|
+
C19,
|
|
17990
18288
|
"INDIRECT(ref_text, [a1])",
|
|
17991
18289
|
"The reference named by a text.",
|
|
17992
18290
|
1,
|
|
@@ -18002,7 +18300,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18002
18300
|
),
|
|
18003
18301
|
spec(
|
|
18004
18302
|
"ROW",
|
|
18005
|
-
|
|
18303
|
+
C19,
|
|
18006
18304
|
"ROW([reference])",
|
|
18007
18305
|
"The row number of a reference.",
|
|
18008
18306
|
0,
|
|
@@ -18012,7 +18310,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18012
18310
|
),
|
|
18013
18311
|
spec(
|
|
18014
18312
|
"COLUMN",
|
|
18015
|
-
|
|
18313
|
+
C19,
|
|
18016
18314
|
"COLUMN([reference])",
|
|
18017
18315
|
"The column number of a reference.",
|
|
18018
18316
|
0,
|
|
@@ -18022,7 +18320,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18022
18320
|
),
|
|
18023
18321
|
spec(
|
|
18024
18322
|
"ROWS",
|
|
18025
|
-
|
|
18323
|
+
C19,
|
|
18026
18324
|
"ROWS(array)",
|
|
18027
18325
|
"The number of rows in a reference or array.",
|
|
18028
18326
|
1,
|
|
@@ -18035,7 +18333,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18035
18333
|
),
|
|
18036
18334
|
spec(
|
|
18037
18335
|
"COLUMNS",
|
|
18038
|
-
|
|
18336
|
+
C19,
|
|
18039
18337
|
"COLUMNS(array)",
|
|
18040
18338
|
"The number of columns in a reference or array.",
|
|
18041
18339
|
1,
|
|
@@ -18048,7 +18346,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18048
18346
|
),
|
|
18049
18347
|
spec(
|
|
18050
18348
|
"AREAS",
|
|
18051
|
-
|
|
18349
|
+
C19,
|
|
18052
18350
|
"AREAS(reference)",
|
|
18053
18351
|
"The number of areas in a reference.",
|
|
18054
18352
|
1,
|
|
@@ -18059,7 +18357,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18059
18357
|
{
|
|
18060
18358
|
...spec(
|
|
18061
18359
|
"ADDRESS",
|
|
18062
|
-
|
|
18360
|
+
C19,
|
|
18063
18361
|
"ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])",
|
|
18064
18362
|
"A cell address as text.",
|
|
18065
18363
|
2,
|
|
@@ -18070,7 +18368,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18070
18368
|
},
|
|
18071
18369
|
spec(
|
|
18072
18370
|
"HYPERLINK",
|
|
18073
|
-
|
|
18371
|
+
C19,
|
|
18074
18372
|
"HYPERLINK(link_location, [friendly_name])",
|
|
18075
18373
|
"A link; the cell shows the friendly name.",
|
|
18076
18374
|
1,
|
|
@@ -18079,7 +18377,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18079
18377
|
),
|
|
18080
18378
|
spec(
|
|
18081
18379
|
"ANCHORARRAY",
|
|
18082
|
-
|
|
18380
|
+
C19,
|
|
18083
18381
|
"ANCHORARRAY(reference)",
|
|
18084
18382
|
"The spill range of a dynamic array formula (A1#).",
|
|
18085
18383
|
1,
|
|
@@ -18099,7 +18397,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18099
18397
|
),
|
|
18100
18398
|
spec(
|
|
18101
18399
|
"SINGLE",
|
|
18102
|
-
|
|
18400
|
+
C19,
|
|
18103
18401
|
"SINGLE(value)",
|
|
18104
18402
|
"Implicit intersection (the @ operator).",
|
|
18105
18403
|
1,
|
|
@@ -18109,7 +18407,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18109
18407
|
),
|
|
18110
18408
|
spec(
|
|
18111
18409
|
"FORMULATEXT",
|
|
18112
|
-
|
|
18410
|
+
C19,
|
|
18113
18411
|
"FORMULATEXT(reference)",
|
|
18114
18412
|
"The formula of a cell as text.",
|
|
18115
18413
|
1,
|
|
@@ -18129,7 +18427,7 @@ var REFERENCE_FUNCTIONS = [
|
|
|
18129
18427
|
];
|
|
18130
18428
|
|
|
18131
18429
|
// xlsx/formula/functions/lookup.ts
|
|
18132
|
-
var
|
|
18430
|
+
var C20 = "Lookup & Reference";
|
|
18133
18431
|
function cellOf(value2, row2, col) {
|
|
18134
18432
|
if (value2 instanceof RefValue) {
|
|
18135
18433
|
const area = value2.areas[0];
|
|
@@ -18261,7 +18559,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18261
18559
|
...REFERENCE_FUNCTIONS,
|
|
18262
18560
|
spec(
|
|
18263
18561
|
"VLOOKUP",
|
|
18264
|
-
|
|
18562
|
+
C20,
|
|
18265
18563
|
"VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])",
|
|
18266
18564
|
"Looks up a value in the first column of a table.",
|
|
18267
18565
|
3,
|
|
@@ -18271,7 +18569,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18271
18569
|
),
|
|
18272
18570
|
spec(
|
|
18273
18571
|
"HLOOKUP",
|
|
18274
|
-
|
|
18572
|
+
C20,
|
|
18275
18573
|
"HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])",
|
|
18276
18574
|
"Looks up a value in the first row of a table.",
|
|
18277
18575
|
3,
|
|
@@ -18281,7 +18579,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18281
18579
|
),
|
|
18282
18580
|
spec(
|
|
18283
18581
|
"LOOKUP",
|
|
18284
|
-
|
|
18582
|
+
C20,
|
|
18285
18583
|
"LOOKUP(lookup_value, lookup_vector, [result_vector])",
|
|
18286
18584
|
"Looks up a value in a sorted vector or array.",
|
|
18287
18585
|
2,
|
|
@@ -18291,7 +18589,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18291
18589
|
),
|
|
18292
18590
|
spec(
|
|
18293
18591
|
"MATCH",
|
|
18294
|
-
|
|
18592
|
+
C20,
|
|
18295
18593
|
"MATCH(lookup_value, lookup_array, [match_type])",
|
|
18296
18594
|
"The position of a value in a range.",
|
|
18297
18595
|
2,
|
|
@@ -18302,7 +18600,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18302
18600
|
{
|
|
18303
18601
|
...spec(
|
|
18304
18602
|
"XMATCH",
|
|
18305
|
-
|
|
18603
|
+
C20,
|
|
18306
18604
|
"XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])",
|
|
18307
18605
|
"The position of a value with flexible matching.",
|
|
18308
18606
|
2,
|
|
@@ -18324,7 +18622,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18324
18622
|
},
|
|
18325
18623
|
spec(
|
|
18326
18624
|
"XLOOKUP",
|
|
18327
|
-
|
|
18625
|
+
C20,
|
|
18328
18626
|
"XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])",
|
|
18329
18627
|
"Searches a range and returns the matching item from another.",
|
|
18330
18628
|
3,
|
|
@@ -18334,7 +18632,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18334
18632
|
),
|
|
18335
18633
|
spec(
|
|
18336
18634
|
"INDEX",
|
|
18337
|
-
|
|
18635
|
+
C20,
|
|
18338
18636
|
"INDEX(array, row_num, [column_num], [area_num])",
|
|
18339
18637
|
"The value or reference at a position.",
|
|
18340
18638
|
1,
|
|
@@ -18344,7 +18642,7 @@ var LOOKUP_FUNCTIONS = [
|
|
|
18344
18642
|
),
|
|
18345
18643
|
spec(
|
|
18346
18644
|
"CHOOSE",
|
|
18347
|
-
|
|
18645
|
+
C20,
|
|
18348
18646
|
"CHOOSE(index_num, value1, [value2], ...)",
|
|
18349
18647
|
"Chooses a value from a list by index.",
|
|
18350
18648
|
2,
|
|
@@ -18548,7 +18846,7 @@ function liftCriteria(ctx, pairs, fn) {
|
|
|
18548
18846
|
}
|
|
18549
18847
|
|
|
18550
18848
|
// xlsx/formula/functions/math-sum.ts
|
|
18551
|
-
var
|
|
18849
|
+
var C21 = "Math & Trig";
|
|
18552
18850
|
var numbersOf = (values2) => values2.filter((v) => typeof v === "number");
|
|
18553
18851
|
function sumProduct(ctx, args) {
|
|
18554
18852
|
const matrices = args.map((a2) => ctx.toMatrix(a2));
|
|
@@ -18654,7 +18952,7 @@ function aggregate2(code, values2, k) {
|
|
|
18654
18952
|
var SUM_FUNCTIONS = [
|
|
18655
18953
|
spec(
|
|
18656
18954
|
"SUM",
|
|
18657
|
-
|
|
18955
|
+
C21,
|
|
18658
18956
|
"SUM(number1, [number2], ...)",
|
|
18659
18957
|
"Adds its arguments.",
|
|
18660
18958
|
0,
|
|
@@ -18664,7 +18962,7 @@ var SUM_FUNCTIONS = [
|
|
|
18664
18962
|
),
|
|
18665
18963
|
spec(
|
|
18666
18964
|
"PRODUCT",
|
|
18667
|
-
|
|
18965
|
+
C21,
|
|
18668
18966
|
"PRODUCT(number1, [number2], ...)",
|
|
18669
18967
|
"Multiplies its arguments.",
|
|
18670
18968
|
1,
|
|
@@ -18677,7 +18975,7 @@ var SUM_FUNCTIONS = [
|
|
|
18677
18975
|
),
|
|
18678
18976
|
spec(
|
|
18679
18977
|
"SUMSQ",
|
|
18680
|
-
|
|
18978
|
+
C21,
|
|
18681
18979
|
"SUMSQ(number1, [number2], ...)",
|
|
18682
18980
|
"The sum of the squares of the arguments.",
|
|
18683
18981
|
1,
|
|
@@ -18687,7 +18985,7 @@ var SUM_FUNCTIONS = [
|
|
|
18687
18985
|
),
|
|
18688
18986
|
spec(
|
|
18689
18987
|
"SUMPRODUCT",
|
|
18690
|
-
|
|
18988
|
+
C21,
|
|
18691
18989
|
"SUMPRODUCT(array1, [array2], ...)",
|
|
18692
18990
|
"The sum of the products of corresponding array elements.",
|
|
18693
18991
|
1,
|
|
@@ -18697,7 +18995,7 @@ var SUM_FUNCTIONS = [
|
|
|
18697
18995
|
),
|
|
18698
18996
|
spec(
|
|
18699
18997
|
"SUMX2MY2",
|
|
18700
|
-
|
|
18998
|
+
C21,
|
|
18701
18999
|
"SUMX2MY2(array_x, array_y)",
|
|
18702
19000
|
"Sum of the differences of squares.",
|
|
18703
19001
|
2,
|
|
@@ -18707,7 +19005,7 @@ var SUM_FUNCTIONS = [
|
|
|
18707
19005
|
),
|
|
18708
19006
|
spec(
|
|
18709
19007
|
"SUMX2PY2",
|
|
18710
|
-
|
|
19008
|
+
C21,
|
|
18711
19009
|
"SUMX2PY2(array_x, array_y)",
|
|
18712
19010
|
"Sum of the sums of squares.",
|
|
18713
19011
|
2,
|
|
@@ -18717,7 +19015,7 @@ var SUM_FUNCTIONS = [
|
|
|
18717
19015
|
),
|
|
18718
19016
|
spec(
|
|
18719
19017
|
"SUMXMY2",
|
|
18720
|
-
|
|
19018
|
+
C21,
|
|
18721
19019
|
"SUMXMY2(array_x, array_y)",
|
|
18722
19020
|
"Sum of the squares of differences.",
|
|
18723
19021
|
2,
|
|
@@ -18727,7 +19025,7 @@ var SUM_FUNCTIONS = [
|
|
|
18727
19025
|
),
|
|
18728
19026
|
spec(
|
|
18729
19027
|
"SUMIF",
|
|
18730
|
-
|
|
19028
|
+
C21,
|
|
18731
19029
|
"SUMIF(range, criteria, [sum_range])",
|
|
18732
19030
|
"Adds the cells that meet a criterion.",
|
|
18733
19031
|
2,
|
|
@@ -18740,7 +19038,7 @@ var SUM_FUNCTIONS = [
|
|
|
18740
19038
|
),
|
|
18741
19039
|
spec(
|
|
18742
19040
|
"SUMIFS",
|
|
18743
|
-
|
|
19041
|
+
C21,
|
|
18744
19042
|
"SUMIFS(sum_range, criteria_range1, criteria1, ...)",
|
|
18745
19043
|
"Adds the cells that meet several criteria.",
|
|
18746
19044
|
3,
|
|
@@ -18754,7 +19052,7 @@ var SUM_FUNCTIONS = [
|
|
|
18754
19052
|
),
|
|
18755
19053
|
spec(
|
|
18756
19054
|
"SUBTOTAL",
|
|
18757
|
-
|
|
19055
|
+
C21,
|
|
18758
19056
|
"SUBTOTAL(function_num, ref1, ...)",
|
|
18759
19057
|
"A subtotal (1-11 include hidden rows, 101-111 ignore them).",
|
|
18760
19058
|
2,
|
|
@@ -18769,7 +19067,7 @@ var SUM_FUNCTIONS = [
|
|
|
18769
19067
|
),
|
|
18770
19068
|
spec(
|
|
18771
19069
|
"AGGREGATE",
|
|
18772
|
-
|
|
19070
|
+
C21,
|
|
18773
19071
|
"AGGREGATE(function_num, options, ref1, ...)",
|
|
18774
19072
|
"An aggregate that can ignore hidden rows and errors.",
|
|
18775
19073
|
3,
|
|
@@ -18809,14 +19107,14 @@ var SUM_FUNCTIONS = [
|
|
|
18809
19107
|
];
|
|
18810
19108
|
|
|
18811
19109
|
// xlsx/formula/functions/math-more.ts
|
|
18812
|
-
var
|
|
19110
|
+
var C22 = "Math & Trig";
|
|
18813
19111
|
var MATH_MORE = [
|
|
18814
|
-
numeric("SIN",
|
|
18815
|
-
numeric("COS",
|
|
18816
|
-
numeric("TAN",
|
|
19112
|
+
numeric("SIN", C22, "SIN(number)", "The sine of an angle in radians.", 1, 1, Math.sin),
|
|
19113
|
+
numeric("COS", C22, "COS(number)", "The cosine of an angle in radians.", 1, 1, Math.cos),
|
|
19114
|
+
numeric("TAN", C22, "TAN(number)", "The tangent of an angle in radians.", 1, 1, Math.tan),
|
|
18817
19115
|
numeric(
|
|
18818
19116
|
"ASIN",
|
|
18819
|
-
|
|
19117
|
+
C22,
|
|
18820
19118
|
"ASIN(number)",
|
|
18821
19119
|
"The arcsine in radians.",
|
|
18822
19120
|
1,
|
|
@@ -18825,17 +19123,17 @@ var MATH_MORE = [
|
|
|
18825
19123
|
),
|
|
18826
19124
|
numeric(
|
|
18827
19125
|
"ACOS",
|
|
18828
|
-
|
|
19126
|
+
C22,
|
|
18829
19127
|
"ACOS(number)",
|
|
18830
19128
|
"The arccosine in radians.",
|
|
18831
19129
|
1,
|
|
18832
19130
|
1,
|
|
18833
19131
|
(x) => domain(Math.abs(x) <= 1, Math.acos(x))
|
|
18834
19132
|
),
|
|
18835
|
-
numeric("ATAN",
|
|
19133
|
+
numeric("ATAN", C22, "ATAN(number)", "The arctangent in radians.", 1, 1, Math.atan),
|
|
18836
19134
|
numeric(
|
|
18837
19135
|
"ATAN2",
|
|
18838
|
-
|
|
19136
|
+
C22,
|
|
18839
19137
|
"ATAN2(x_num, y_num)",
|
|
18840
19138
|
"The arctangent of x and y coordinates.",
|
|
18841
19139
|
2,
|
|
@@ -18845,13 +19143,13 @@ var MATH_MORE = [
|
|
|
18845
19143
|
return Math.atan2(y ?? 0, x);
|
|
18846
19144
|
}
|
|
18847
19145
|
),
|
|
18848
|
-
numeric("SINH",
|
|
18849
|
-
numeric("COSH",
|
|
18850
|
-
numeric("TANH",
|
|
18851
|
-
numeric("ASINH",
|
|
19146
|
+
numeric("SINH", C22, "SINH(number)", "The hyperbolic sine.", 1, 1, Math.sinh),
|
|
19147
|
+
numeric("COSH", C22, "COSH(number)", "The hyperbolic cosine.", 1, 1, Math.cosh),
|
|
19148
|
+
numeric("TANH", C22, "TANH(number)", "The hyperbolic tangent.", 1, 1, Math.tanh),
|
|
19149
|
+
numeric("ASINH", C22, "ASINH(number)", "The inverse hyperbolic sine.", 1, 1, Math.asinh),
|
|
18852
19150
|
numeric(
|
|
18853
19151
|
"ACOSH",
|
|
18854
|
-
|
|
19152
|
+
C22,
|
|
18855
19153
|
"ACOSH(number)",
|
|
18856
19154
|
"The inverse hyperbolic cosine.",
|
|
18857
19155
|
1,
|
|
@@ -18860,7 +19158,7 @@ var MATH_MORE = [
|
|
|
18860
19158
|
),
|
|
18861
19159
|
numeric(
|
|
18862
19160
|
"ATANH",
|
|
18863
|
-
|
|
19161
|
+
C22,
|
|
18864
19162
|
"ATANH(number)",
|
|
18865
19163
|
"The inverse hyperbolic tangent.",
|
|
18866
19164
|
1,
|
|
@@ -18869,7 +19167,7 @@ var MATH_MORE = [
|
|
|
18869
19167
|
),
|
|
18870
19168
|
numeric(
|
|
18871
19169
|
"COT",
|
|
18872
|
-
|
|
19170
|
+
C22,
|
|
18873
19171
|
"COT(number)",
|
|
18874
19172
|
"The cotangent of an angle.",
|
|
18875
19173
|
1,
|
|
@@ -18878,7 +19176,7 @@ var MATH_MORE = [
|
|
|
18878
19176
|
),
|
|
18879
19177
|
numeric(
|
|
18880
19178
|
"COTH",
|
|
18881
|
-
|
|
19179
|
+
C22,
|
|
18882
19180
|
"COTH(number)",
|
|
18883
19181
|
"The hyperbolic cotangent.",
|
|
18884
19182
|
1,
|
|
@@ -18887,7 +19185,7 @@ var MATH_MORE = [
|
|
|
18887
19185
|
),
|
|
18888
19186
|
numeric(
|
|
18889
19187
|
"CSC",
|
|
18890
|
-
|
|
19188
|
+
C22,
|
|
18891
19189
|
"CSC(number)",
|
|
18892
19190
|
"The cosecant of an angle.",
|
|
18893
19191
|
1,
|
|
@@ -18896,19 +19194,19 @@ var MATH_MORE = [
|
|
|
18896
19194
|
),
|
|
18897
19195
|
numeric(
|
|
18898
19196
|
"CSCH",
|
|
18899
|
-
|
|
19197
|
+
C22,
|
|
18900
19198
|
"CSCH(number)",
|
|
18901
19199
|
"The hyperbolic cosecant.",
|
|
18902
19200
|
1,
|
|
18903
19201
|
1,
|
|
18904
19202
|
(x) => x === 0 ? fail(ERR.DIV0) : 1 / Math.sinh(x)
|
|
18905
19203
|
),
|
|
18906
|
-
numeric("SEC",
|
|
18907
|
-
numeric("SECH",
|
|
18908
|
-
numeric("ACOT",
|
|
19204
|
+
numeric("SEC", C22, "SEC(number)", "The secant of an angle.", 1, 1, (x) => 1 / Math.cos(x)),
|
|
19205
|
+
numeric("SECH", C22, "SECH(number)", "The hyperbolic secant.", 1, 1, (x) => 1 / Math.cosh(x)),
|
|
19206
|
+
numeric("ACOT", C22, "ACOT(number)", "The arccotangent.", 1, 1, (x) => Math.PI / 2 - Math.atan(x)),
|
|
18909
19207
|
numeric(
|
|
18910
19208
|
"ACOTH",
|
|
18911
|
-
|
|
19209
|
+
C22,
|
|
18912
19210
|
"ACOTH(number)",
|
|
18913
19211
|
"The inverse hyperbolic cotangent.",
|
|
18914
19212
|
1,
|
|
@@ -18917,7 +19215,7 @@ var MATH_MORE = [
|
|
|
18917
19215
|
),
|
|
18918
19216
|
numeric(
|
|
18919
19217
|
"DEGREES",
|
|
18920
|
-
|
|
19218
|
+
C22,
|
|
18921
19219
|
"DEGREES(angle)",
|
|
18922
19220
|
"Converts radians to degrees.",
|
|
18923
19221
|
1,
|
|
@@ -18926,7 +19224,7 @@ var MATH_MORE = [
|
|
|
18926
19224
|
),
|
|
18927
19225
|
numeric(
|
|
18928
19226
|
"RADIANS",
|
|
18929
|
-
|
|
19227
|
+
C22,
|
|
18930
19228
|
"RADIANS(angle)",
|
|
18931
19229
|
"Converts degrees to radians.",
|
|
18932
19230
|
1,
|
|
@@ -18935,7 +19233,7 @@ var MATH_MORE = [
|
|
|
18935
19233
|
),
|
|
18936
19234
|
spec(
|
|
18937
19235
|
"RAND",
|
|
18938
|
-
|
|
19236
|
+
C22,
|
|
18939
19237
|
"RAND()",
|
|
18940
19238
|
"A random number between 0 and 1.",
|
|
18941
19239
|
0,
|
|
@@ -18946,7 +19244,7 @@ var MATH_MORE = [
|
|
|
18946
19244
|
),
|
|
18947
19245
|
spec(
|
|
18948
19246
|
"RANDBETWEEN",
|
|
18949
|
-
|
|
19247
|
+
C22,
|
|
18950
19248
|
"RANDBETWEEN(bottom, top)",
|
|
18951
19249
|
"A random integer between two numbers.",
|
|
18952
19250
|
2,
|
|
@@ -18962,7 +19260,7 @@ var MATH_MORE = [
|
|
|
18962
19260
|
),
|
|
18963
19261
|
spec(
|
|
18964
19262
|
"SERIESSUM",
|
|
18965
|
-
|
|
19263
|
+
C22,
|
|
18966
19264
|
"SERIESSUM(x, n, m, coefficients)",
|
|
18967
19265
|
"The sum of a power series.",
|
|
18968
19266
|
4,
|
|
@@ -18981,7 +19279,7 @@ var MATH_MORE = [
|
|
|
18981
19279
|
];
|
|
18982
19280
|
|
|
18983
19281
|
// xlsx/formula/functions/math-combin.ts
|
|
18984
|
-
var
|
|
19282
|
+
var C23 = "Math & Trig";
|
|
18985
19283
|
var fact = (n) => {
|
|
18986
19284
|
if (n < 0) fail(ERR.NUM);
|
|
18987
19285
|
let out = 1;
|
|
@@ -19005,8 +19303,8 @@ function integers(args, ctx) {
|
|
|
19005
19303
|
});
|
|
19006
19304
|
}
|
|
19007
19305
|
var COMBINATORIC_FUNCTIONS = [
|
|
19008
|
-
numeric("FACT",
|
|
19009
|
-
numeric("FACTDOUBLE",
|
|
19306
|
+
numeric("FACT", C23, "FACT(number)", "The factorial of a number.", 1, 1, fact),
|
|
19307
|
+
numeric("FACTDOUBLE", C23, "FACTDOUBLE(number)", "The double factorial of a number.", 1, 1, (n) => {
|
|
19010
19308
|
if (n < -1) fail(ERR.NUM);
|
|
19011
19309
|
let out = 1;
|
|
19012
19310
|
for (let i2 = Math.trunc(n); i2 > 1; i2 -= 2) out *= i2;
|
|
@@ -19014,7 +19312,7 @@ var COMBINATORIC_FUNCTIONS = [
|
|
|
19014
19312
|
}),
|
|
19015
19313
|
numeric(
|
|
19016
19314
|
"COMBIN",
|
|
19017
|
-
|
|
19315
|
+
C23,
|
|
19018
19316
|
"COMBIN(number, number_chosen)",
|
|
19019
19317
|
"The number of combinations.",
|
|
19020
19318
|
2,
|
|
@@ -19023,7 +19321,7 @@ var COMBINATORIC_FUNCTIONS = [
|
|
|
19023
19321
|
),
|
|
19024
19322
|
numeric(
|
|
19025
19323
|
"COMBINA",
|
|
19026
|
-
|
|
19324
|
+
C23,
|
|
19027
19325
|
"COMBINA(number, number_chosen)",
|
|
19028
19326
|
"Combinations with repetitions.",
|
|
19029
19327
|
2,
|
|
@@ -19035,7 +19333,7 @@ var COMBINATORIC_FUNCTIONS = [
|
|
|
19035
19333
|
),
|
|
19036
19334
|
spec(
|
|
19037
19335
|
"MULTINOMIAL",
|
|
19038
|
-
|
|
19336
|
+
C23,
|
|
19039
19337
|
"MULTINOMIAL(number1, ...)",
|
|
19040
19338
|
"The multinomial of a set of numbers.",
|
|
19041
19339
|
1,
|
|
@@ -19049,7 +19347,7 @@ var COMBINATORIC_FUNCTIONS = [
|
|
|
19049
19347
|
),
|
|
19050
19348
|
spec(
|
|
19051
19349
|
"GCD",
|
|
19052
|
-
|
|
19350
|
+
C23,
|
|
19053
19351
|
"GCD(number1, ...)",
|
|
19054
19352
|
"The greatest common divisor.",
|
|
19055
19353
|
1,
|
|
@@ -19059,7 +19357,7 @@ var COMBINATORIC_FUNCTIONS = [
|
|
|
19059
19357
|
),
|
|
19060
19358
|
spec(
|
|
19061
19359
|
"LCM",
|
|
19062
|
-
|
|
19360
|
+
C23,
|
|
19063
19361
|
"LCM(number1, ...)",
|
|
19064
19362
|
"The least common multiple.",
|
|
19065
19363
|
1,
|
|
@@ -19107,7 +19405,7 @@ function mround(x, m) {
|
|
|
19107
19405
|
}
|
|
19108
19406
|
|
|
19109
19407
|
// xlsx/formula/functions/math.ts
|
|
19110
|
-
var
|
|
19408
|
+
var C24 = "Math & Trig";
|
|
19111
19409
|
function roundTo(x, digits2, mode) {
|
|
19112
19410
|
if (!Number.isFinite(x)) return x;
|
|
19113
19411
|
const d = Math.trunc(digits2);
|
|
@@ -19126,10 +19424,10 @@ var quotientMultiple = (x, sig, op2) => {
|
|
|
19126
19424
|
var MATH_FUNCTIONS = [
|
|
19127
19425
|
...MATH_MORE,
|
|
19128
19426
|
...SUM_FUNCTIONS,
|
|
19129
|
-
numeric("ABS",
|
|
19427
|
+
numeric("ABS", C24, "ABS(number)", "The absolute value of a number.", 1, 1, Math.abs),
|
|
19130
19428
|
numeric(
|
|
19131
19429
|
"SIGN",
|
|
19132
|
-
|
|
19430
|
+
C24,
|
|
19133
19431
|
"SIGN(number)",
|
|
19134
19432
|
"The sign of a number: 1, 0 or -1.",
|
|
19135
19433
|
1,
|
|
@@ -19138,7 +19436,7 @@ var MATH_FUNCTIONS = [
|
|
|
19138
19436
|
),
|
|
19139
19437
|
numeric(
|
|
19140
19438
|
"INT",
|
|
19141
|
-
|
|
19439
|
+
C24,
|
|
19142
19440
|
"INT(number)",
|
|
19143
19441
|
"Rounds a number down to the nearest integer.",
|
|
19144
19442
|
1,
|
|
@@ -19147,7 +19445,7 @@ var MATH_FUNCTIONS = [
|
|
|
19147
19445
|
),
|
|
19148
19446
|
numeric(
|
|
19149
19447
|
"TRUNC",
|
|
19150
|
-
|
|
19448
|
+
C24,
|
|
19151
19449
|
"TRUNC(number, [num_digits])",
|
|
19152
19450
|
"Truncates a number toward zero.",
|
|
19153
19451
|
1,
|
|
@@ -19156,7 +19454,7 @@ var MATH_FUNCTIONS = [
|
|
|
19156
19454
|
),
|
|
19157
19455
|
numeric(
|
|
19158
19456
|
"ROUND",
|
|
19159
|
-
|
|
19457
|
+
C24,
|
|
19160
19458
|
"ROUND(number, num_digits)",
|
|
19161
19459
|
"Rounds a number to a number of digits.",
|
|
19162
19460
|
2,
|
|
@@ -19165,7 +19463,7 @@ var MATH_FUNCTIONS = [
|
|
|
19165
19463
|
),
|
|
19166
19464
|
numeric(
|
|
19167
19465
|
"ROUNDUP",
|
|
19168
|
-
|
|
19466
|
+
C24,
|
|
19169
19467
|
"ROUNDUP(number, num_digits)",
|
|
19170
19468
|
"Rounds a number away from zero.",
|
|
19171
19469
|
2,
|
|
@@ -19174,7 +19472,7 @@ var MATH_FUNCTIONS = [
|
|
|
19174
19472
|
),
|
|
19175
19473
|
numeric(
|
|
19176
19474
|
"ROUNDDOWN",
|
|
19177
|
-
|
|
19475
|
+
C24,
|
|
19178
19476
|
"ROUNDDOWN(number, num_digits)",
|
|
19179
19477
|
"Rounds a number toward zero.",
|
|
19180
19478
|
2,
|
|
@@ -19183,7 +19481,7 @@ var MATH_FUNCTIONS = [
|
|
|
19183
19481
|
),
|
|
19184
19482
|
numeric(
|
|
19185
19483
|
"MROUND",
|
|
19186
|
-
|
|
19484
|
+
C24,
|
|
19187
19485
|
"MROUND(number, multiple)",
|
|
19188
19486
|
"Rounds a number to the nearest multiple.",
|
|
19189
19487
|
2,
|
|
@@ -19192,7 +19490,7 @@ var MATH_FUNCTIONS = [
|
|
|
19192
19490
|
),
|
|
19193
19491
|
numeric(
|
|
19194
19492
|
"CEILING",
|
|
19195
|
-
|
|
19493
|
+
C24,
|
|
19196
19494
|
"CEILING(number, significance)",
|
|
19197
19495
|
"Rounds a number up to a multiple of significance.",
|
|
19198
19496
|
2,
|
|
@@ -19204,7 +19502,7 @@ var MATH_FUNCTIONS = [
|
|
|
19204
19502
|
),
|
|
19205
19503
|
numeric(
|
|
19206
19504
|
"FLOOR",
|
|
19207
|
-
|
|
19505
|
+
C24,
|
|
19208
19506
|
"FLOOR(number, significance)",
|
|
19209
19507
|
"Rounds a number down to a multiple of significance.",
|
|
19210
19508
|
2,
|
|
@@ -19217,7 +19515,7 @@ var MATH_FUNCTIONS = [
|
|
|
19217
19515
|
),
|
|
19218
19516
|
numeric(
|
|
19219
19517
|
"CEILING.MATH",
|
|
19220
|
-
|
|
19518
|
+
C24,
|
|
19221
19519
|
"CEILING.MATH(number, [significance], [mode])",
|
|
19222
19520
|
"Rounds a number up to an integer or multiple.",
|
|
19223
19521
|
1,
|
|
@@ -19230,7 +19528,7 @@ var MATH_FUNCTIONS = [
|
|
|
19230
19528
|
),
|
|
19231
19529
|
numeric(
|
|
19232
19530
|
"FLOOR.MATH",
|
|
19233
|
-
|
|
19531
|
+
C24,
|
|
19234
19532
|
"FLOOR.MATH(number, [significance], [mode])",
|
|
19235
19533
|
"Rounds a number down to an integer or multiple.",
|
|
19236
19534
|
1,
|
|
@@ -19243,7 +19541,7 @@ var MATH_FUNCTIONS = [
|
|
|
19243
19541
|
),
|
|
19244
19542
|
numeric(
|
|
19245
19543
|
"CEILING.PRECISE",
|
|
19246
|
-
|
|
19544
|
+
C24,
|
|
19247
19545
|
"CEILING.PRECISE(number, [significance])",
|
|
19248
19546
|
"Rounds a number up regardless of sign.",
|
|
19249
19547
|
1,
|
|
@@ -19252,7 +19550,7 @@ var MATH_FUNCTIONS = [
|
|
|
19252
19550
|
),
|
|
19253
19551
|
numeric(
|
|
19254
19552
|
"ISO.CEILING",
|
|
19255
|
-
|
|
19553
|
+
C24,
|
|
19256
19554
|
"ISO.CEILING(number, [significance])",
|
|
19257
19555
|
"Rounds a number up regardless of sign.",
|
|
19258
19556
|
1,
|
|
@@ -19261,7 +19559,7 @@ var MATH_FUNCTIONS = [
|
|
|
19261
19559
|
),
|
|
19262
19560
|
numeric(
|
|
19263
19561
|
"FLOOR.PRECISE",
|
|
19264
|
-
|
|
19562
|
+
C24,
|
|
19265
19563
|
"FLOOR.PRECISE(number, [significance])",
|
|
19266
19564
|
"Rounds a number down regardless of sign.",
|
|
19267
19565
|
1,
|
|
@@ -19270,7 +19568,7 @@ var MATH_FUNCTIONS = [
|
|
|
19270
19568
|
),
|
|
19271
19569
|
numeric(
|
|
19272
19570
|
"EVEN",
|
|
19273
|
-
|
|
19571
|
+
C24,
|
|
19274
19572
|
"EVEN(number)",
|
|
19275
19573
|
"Rounds a number away from zero to an even integer.",
|
|
19276
19574
|
1,
|
|
@@ -19279,7 +19577,7 @@ var MATH_FUNCTIONS = [
|
|
|
19279
19577
|
),
|
|
19280
19578
|
numeric(
|
|
19281
19579
|
"ODD",
|
|
19282
|
-
|
|
19580
|
+
C24,
|
|
19283
19581
|
"ODD(number)",
|
|
19284
19582
|
"Rounds a number away from zero to an odd integer.",
|
|
19285
19583
|
1,
|
|
@@ -19291,7 +19589,7 @@ var MATH_FUNCTIONS = [
|
|
|
19291
19589
|
),
|
|
19292
19590
|
numeric(
|
|
19293
19591
|
"MOD",
|
|
19294
|
-
|
|
19592
|
+
C24,
|
|
19295
19593
|
"MOD(number, divisor)",
|
|
19296
19594
|
"The remainder after division (sign of the divisor).",
|
|
19297
19595
|
2,
|
|
@@ -19300,7 +19598,7 @@ var MATH_FUNCTIONS = [
|
|
|
19300
19598
|
),
|
|
19301
19599
|
numeric(
|
|
19302
19600
|
"QUOTIENT",
|
|
19303
|
-
|
|
19601
|
+
C24,
|
|
19304
19602
|
"QUOTIENT(numerator, denominator)",
|
|
19305
19603
|
"The integer part of a division.",
|
|
19306
19604
|
2,
|
|
@@ -19312,7 +19610,7 @@ var MATH_FUNCTIONS = [
|
|
|
19312
19610
|
),
|
|
19313
19611
|
numeric(
|
|
19314
19612
|
"SQRT",
|
|
19315
|
-
|
|
19613
|
+
C24,
|
|
19316
19614
|
"SQRT(number)",
|
|
19317
19615
|
"The positive square root.",
|
|
19318
19616
|
1,
|
|
@@ -19321,7 +19619,7 @@ var MATH_FUNCTIONS = [
|
|
|
19321
19619
|
),
|
|
19322
19620
|
numeric(
|
|
19323
19621
|
"SQRTPI",
|
|
19324
|
-
|
|
19622
|
+
C24,
|
|
19325
19623
|
"SQRTPI(number)",
|
|
19326
19624
|
"The square root of number * pi.",
|
|
19327
19625
|
1,
|
|
@@ -19330,18 +19628,18 @@ var MATH_FUNCTIONS = [
|
|
|
19330
19628
|
),
|
|
19331
19629
|
numeric(
|
|
19332
19630
|
"POWER",
|
|
19333
|
-
|
|
19631
|
+
C24,
|
|
19334
19632
|
"POWER(number, power)",
|
|
19335
19633
|
"A number raised to a power.",
|
|
19336
19634
|
2,
|
|
19337
19635
|
2,
|
|
19338
19636
|
(b, e) => power(b, e ?? 1)
|
|
19339
19637
|
),
|
|
19340
|
-
numeric("EXP",
|
|
19341
|
-
numeric("LN",
|
|
19638
|
+
numeric("EXP", C24, "EXP(number)", "e raised to a power.", 1, 1, Math.exp),
|
|
19639
|
+
numeric("LN", C24, "LN(number)", "The natural logarithm.", 1, 1, (x) => domain(x > 0, Math.log(x))),
|
|
19342
19640
|
numeric(
|
|
19343
19641
|
"LOG10",
|
|
19344
|
-
|
|
19642
|
+
C24,
|
|
19345
19643
|
"LOG10(number)",
|
|
19346
19644
|
"The base-10 logarithm.",
|
|
19347
19645
|
1,
|
|
@@ -19350,7 +19648,7 @@ var MATH_FUNCTIONS = [
|
|
|
19350
19648
|
),
|
|
19351
19649
|
numeric(
|
|
19352
19650
|
"LOG",
|
|
19353
|
-
|
|
19651
|
+
C24,
|
|
19354
19652
|
"LOG(number, [base])",
|
|
19355
19653
|
"The logarithm to a base (10 by default).",
|
|
19356
19654
|
1,
|
|
@@ -19362,12 +19660,12 @@ var MATH_FUNCTIONS = [
|
|
|
19362
19660
|
return base === 10 ? Math.log10(x) : Math.log(x) / Math.log(base);
|
|
19363
19661
|
}
|
|
19364
19662
|
),
|
|
19365
|
-
numeric("PI",
|
|
19663
|
+
numeric("PI", C24, "PI()", "The value of pi.", 0, 0, () => Math.PI),
|
|
19366
19664
|
...COMBINATORIC_FUNCTIONS
|
|
19367
19665
|
];
|
|
19368
19666
|
|
|
19369
19667
|
// xlsx/formula/functions/matrix.ts
|
|
19370
|
-
var
|
|
19668
|
+
var C25 = "Math & Trig";
|
|
19371
19669
|
function numbers2(ctx, value2) {
|
|
19372
19670
|
return ctx.toMatrix(value2 ?? null).data.map(
|
|
19373
19671
|
(row2) => row2.map((v) => {
|
|
@@ -19426,7 +19724,7 @@ function eliminate(input, invert2) {
|
|
|
19426
19724
|
var MATRIX_FUNCTIONS = [
|
|
19427
19725
|
spec(
|
|
19428
19726
|
"MMULT",
|
|
19429
|
-
|
|
19727
|
+
C25,
|
|
19430
19728
|
"MMULT(array1, array2)",
|
|
19431
19729
|
"The matrix product of two arrays.",
|
|
19432
19730
|
2,
|
|
@@ -19447,7 +19745,7 @@ var MATRIX_FUNCTIONS = [
|
|
|
19447
19745
|
),
|
|
19448
19746
|
spec(
|
|
19449
19747
|
"MDETERM",
|
|
19450
|
-
|
|
19748
|
+
C25,
|
|
19451
19749
|
"MDETERM(array)",
|
|
19452
19750
|
"The determinant of a square matrix.",
|
|
19453
19751
|
1,
|
|
@@ -19457,7 +19755,7 @@ var MATRIX_FUNCTIONS = [
|
|
|
19457
19755
|
),
|
|
19458
19756
|
spec(
|
|
19459
19757
|
"MINVERSE",
|
|
19460
|
-
|
|
19758
|
+
C25,
|
|
19461
19759
|
"MINVERSE(array)",
|
|
19462
19760
|
"The inverse of a square matrix.",
|
|
19463
19761
|
1,
|
|
@@ -19469,7 +19767,7 @@ var MATRIX_FUNCTIONS = [
|
|
|
19469
19767
|
},
|
|
19470
19768
|
["any"]
|
|
19471
19769
|
),
|
|
19472
|
-
spec("MUNIT",
|
|
19770
|
+
spec("MUNIT", C25, "MUNIT(dimension)", "The identity matrix.", 1, 1, (args) => {
|
|
19473
19771
|
const n = int3(args[0]);
|
|
19474
19772
|
if (n < 1) fail(ERR.VALUE);
|
|
19475
19773
|
return Matrix.build(n, n, (r, c2) => r === c2 ? 1 : 0);
|
|
@@ -19536,7 +19834,7 @@ function fitStatistics(fit) {
|
|
|
19536
19834
|
}
|
|
19537
19835
|
|
|
19538
19836
|
// xlsx/formula/functions/regression.ts
|
|
19539
|
-
var
|
|
19837
|
+
var C26 = "Statistical";
|
|
19540
19838
|
function numbersOf2(ctx, value2) {
|
|
19541
19839
|
return ctx.toMatrix(value2 ?? null).data.map(
|
|
19542
19840
|
(row2) => row2.map((v) => {
|
|
@@ -19546,22 +19844,22 @@ function numbersOf2(ctx, value2) {
|
|
|
19546
19844
|
})
|
|
19547
19845
|
);
|
|
19548
19846
|
}
|
|
19549
|
-
var asObservations = (m,
|
|
19847
|
+
var asObservations = (m, column2) => column2 ? m : (m[0] ?? []).map((_, c2) => m.map((row2) => row2[c2] ?? 0));
|
|
19550
19848
|
function layout(ctx, args) {
|
|
19551
19849
|
const ym = numbersOf2(ctx, args[0]);
|
|
19552
19850
|
const rows = ym.length;
|
|
19553
19851
|
const cols = ym[0]?.length ?? 0;
|
|
19554
19852
|
if (rows === 0 || cols === 0 || rows > 1 && cols > 1) fail(ERR.REF);
|
|
19555
|
-
const
|
|
19853
|
+
const column2 = cols === 1;
|
|
19556
19854
|
const y = ym.flat();
|
|
19557
|
-
if (omitted(args, 1)) return { y, x: y.map((_, i2) => [i2 + 1]), column };
|
|
19855
|
+
if (omitted(args, 1)) return { y, x: y.map((_, i2) => [i2 + 1]), column: column2 };
|
|
19558
19856
|
const xm = numbersOf2(ctx, args[1]);
|
|
19559
|
-
const x = asObservations(xm,
|
|
19857
|
+
const x = asObservations(xm, column2);
|
|
19560
19858
|
if (x.length !== y.length) {
|
|
19561
19859
|
if (xm.flat().length !== y.length) fail(ERR.REF);
|
|
19562
|
-
return { y, x: xm.flat().map((v) => [v]), column };
|
|
19860
|
+
return { y, x: xm.flat().map((v) => [v]), column: column2 };
|
|
19563
19861
|
}
|
|
19564
|
-
return { y, x, column };
|
|
19862
|
+
return { y, x, column: column2 };
|
|
19565
19863
|
}
|
|
19566
19864
|
var withConst = (args, index3) => omitted(args, index3) ? true : bool(args[index3]);
|
|
19567
19865
|
var row = (values2, width) => [
|
|
@@ -19605,7 +19903,7 @@ var ARGS = ["any"];
|
|
|
19605
19903
|
var REGRESSION_FUNCTIONS = [
|
|
19606
19904
|
spec(
|
|
19607
19905
|
"LINEST",
|
|
19608
|
-
|
|
19906
|
+
C26,
|
|
19609
19907
|
"LINEST(known_y, [known_x], [const], [stats])",
|
|
19610
19908
|
"The statistics of a straight-line (or multiple linear) least-squares fit.",
|
|
19611
19909
|
1,
|
|
@@ -19619,7 +19917,7 @@ var REGRESSION_FUNCTIONS = [
|
|
|
19619
19917
|
),
|
|
19620
19918
|
spec(
|
|
19621
19919
|
"LOGEST",
|
|
19622
|
-
|
|
19920
|
+
C26,
|
|
19623
19921
|
"LOGEST(known_y, [known_x], [const], [stats])",
|
|
19624
19922
|
"The statistics of an exponential-curve fit.",
|
|
19625
19923
|
1,
|
|
@@ -19630,14 +19928,14 @@ var REGRESSION_FUNCTIONS = [
|
|
|
19630
19928
|
const stats = !omitted(args, 3) && bool(args[3]);
|
|
19631
19929
|
const table2 = coefficientTable(fit, stats, Math.exp);
|
|
19632
19930
|
if (!stats) return table2;
|
|
19633
|
-
const
|
|
19634
|
-
return new Matrix([table2.data[0] ?? [], ...
|
|
19931
|
+
const plain3 = coefficientTable(fit, true, (v) => v).data;
|
|
19932
|
+
return new Matrix([table2.data[0] ?? [], ...plain3.slice(1)]);
|
|
19635
19933
|
},
|
|
19636
19934
|
ARGS
|
|
19637
19935
|
),
|
|
19638
19936
|
spec(
|
|
19639
19937
|
"TREND",
|
|
19640
|
-
|
|
19938
|
+
C26,
|
|
19641
19939
|
"TREND(known_y, [known_x], [new_x], [const])",
|
|
19642
19940
|
"Values along a linear trend.",
|
|
19643
19941
|
1,
|
|
@@ -19651,7 +19949,7 @@ var REGRESSION_FUNCTIONS = [
|
|
|
19651
19949
|
),
|
|
19652
19950
|
spec(
|
|
19653
19951
|
"GROWTH",
|
|
19654
|
-
|
|
19952
|
+
C26,
|
|
19655
19953
|
"GROWTH(known_y, [known_x], [new_x], [const])",
|
|
19656
19954
|
"Values along an exponential trend.",
|
|
19657
19955
|
1,
|
|
@@ -19672,15 +19970,15 @@ function gammaP(a2, x) {
|
|
|
19672
19970
|
const lnPrefix = -x + a2 * Math.log(x) - gammaLn(a2);
|
|
19673
19971
|
if (x < a2 + 1) {
|
|
19674
19972
|
let ap = a2;
|
|
19675
|
-
let
|
|
19676
|
-
let del =
|
|
19973
|
+
let sum3 = 1 / a2;
|
|
19974
|
+
let del = sum3;
|
|
19677
19975
|
for (let n = 0; n < 1e3; n++) {
|
|
19678
19976
|
ap += 1;
|
|
19679
19977
|
del *= x / ap;
|
|
19680
|
-
|
|
19681
|
-
if (Math.abs(del) < Math.abs(
|
|
19978
|
+
sum3 += del;
|
|
19979
|
+
if (Math.abs(del) < Math.abs(sum3) * EPS) break;
|
|
19682
19980
|
}
|
|
19683
|
-
return
|
|
19981
|
+
return sum3 * Math.exp(lnPrefix);
|
|
19684
19982
|
}
|
|
19685
19983
|
let b = x + 1 - a2;
|
|
19686
19984
|
let c2 = 1 / 1e-300;
|
|
@@ -19836,7 +20134,7 @@ var normDist = (x, m, s, cumulative2) => {
|
|
|
19836
20134
|
};
|
|
19837
20135
|
|
|
19838
20136
|
// xlsx/formula/functions/distributions-f.ts
|
|
19839
|
-
var
|
|
20137
|
+
var C27 = "Statistical";
|
|
19840
20138
|
var degrees = (...values2) => {
|
|
19841
20139
|
for (const v of values2) if (v === void 0 || v < 1) fail(ERR.NUM);
|
|
19842
20140
|
};
|
|
@@ -19895,7 +20193,7 @@ var negbinomPmf = (f6, s, p) => {
|
|
|
19895
20193
|
var DISTRIBUTION_F = [
|
|
19896
20194
|
numeric(
|
|
19897
20195
|
"F.DIST",
|
|
19898
|
-
|
|
20196
|
+
C27,
|
|
19899
20197
|
"F.DIST(x, deg_freedom1, deg_freedom2, cumulative)",
|
|
19900
20198
|
"The left-tailed F probability distribution.",
|
|
19901
20199
|
4,
|
|
@@ -19911,7 +20209,7 @@ var DISTRIBUTION_F = [
|
|
|
19911
20209
|
...["F.DIST.RT", "FDIST"].map(
|
|
19912
20210
|
(name) => numeric(
|
|
19913
20211
|
name,
|
|
19914
|
-
|
|
20212
|
+
C27,
|
|
19915
20213
|
`${name}(x, deg_freedom1, deg_freedom2)`,
|
|
19916
20214
|
"The right-tailed F probability distribution.",
|
|
19917
20215
|
3,
|
|
@@ -19925,7 +20223,7 @@ var DISTRIBUTION_F = [
|
|
|
19925
20223
|
),
|
|
19926
20224
|
numeric(
|
|
19927
20225
|
"F.INV",
|
|
19928
|
-
|
|
20226
|
+
C27,
|
|
19929
20227
|
"F.INV(probability, deg_freedom1, deg_freedom2)",
|
|
19930
20228
|
"The inverse of the left-tailed F distribution.",
|
|
19931
20229
|
3,
|
|
@@ -19939,7 +20237,7 @@ var DISTRIBUTION_F = [
|
|
|
19939
20237
|
...["F.INV.RT", "FINV"].map(
|
|
19940
20238
|
(name) => numeric(
|
|
19941
20239
|
name,
|
|
19942
|
-
|
|
20240
|
+
C27,
|
|
19943
20241
|
`${name}(probability, deg_freedom1, deg_freedom2)`,
|
|
19944
20242
|
"The inverse of the right-tailed F distribution.",
|
|
19945
20243
|
3,
|
|
@@ -19954,7 +20252,7 @@ var DISTRIBUTION_F = [
|
|
|
19954
20252
|
...["BETA.INV", "BETAINV"].map(
|
|
19955
20253
|
(name) => numeric(
|
|
19956
20254
|
name,
|
|
19957
|
-
|
|
20255
|
+
C27,
|
|
19958
20256
|
`${name}(probability, alpha, beta, [A], [B])`,
|
|
19959
20257
|
"The inverse of the cumulative beta distribution.",
|
|
19960
20258
|
3,
|
|
@@ -19965,7 +20263,7 @@ var DISTRIBUTION_F = [
|
|
|
19965
20263
|
),
|
|
19966
20264
|
numeric(
|
|
19967
20265
|
"BETADIST",
|
|
19968
|
-
|
|
20266
|
+
C27,
|
|
19969
20267
|
"BETADIST(x, alpha, beta, [A], [B])",
|
|
19970
20268
|
"The cumulative beta distribution.",
|
|
19971
20269
|
3,
|
|
@@ -19979,7 +20277,7 @@ var DISTRIBUTION_F = [
|
|
|
19979
20277
|
...["GAMMA.INV", "GAMMAINV"].map(
|
|
19980
20278
|
(name) => numeric(
|
|
19981
20279
|
name,
|
|
19982
|
-
|
|
20280
|
+
C27,
|
|
19983
20281
|
`${name}(probability, alpha, beta)`,
|
|
19984
20282
|
"The inverse of the gamma cumulative distribution.",
|
|
19985
20283
|
3,
|
|
@@ -19989,7 +20287,7 @@ var DISTRIBUTION_F = [
|
|
|
19989
20287
|
),
|
|
19990
20288
|
numeric(
|
|
19991
20289
|
"GAMMADIST",
|
|
19992
|
-
|
|
20290
|
+
C27,
|
|
19993
20291
|
"GAMMADIST(x, alpha, beta, cumulative)",
|
|
19994
20292
|
"The gamma distribution.",
|
|
19995
20293
|
4,
|
|
@@ -20004,7 +20302,7 @@ var DISTRIBUTION_F = [
|
|
|
20004
20302
|
),
|
|
20005
20303
|
numeric(
|
|
20006
20304
|
"LOGINV",
|
|
20007
|
-
|
|
20305
|
+
C27,
|
|
20008
20306
|
"LOGINV(probability, mean, standard_dev)",
|
|
20009
20307
|
"The inverse of the lognormal cumulative distribution.",
|
|
20010
20308
|
3,
|
|
@@ -20017,7 +20315,7 @@ var DISTRIBUTION_F = [
|
|
|
20017
20315
|
),
|
|
20018
20316
|
numeric(
|
|
20019
20317
|
"LOGNORMDIST",
|
|
20020
|
-
|
|
20318
|
+
C27,
|
|
20021
20319
|
"LOGNORMDIST(x, mean, standard_dev)",
|
|
20022
20320
|
"The cumulative lognormal distribution.",
|
|
20023
20321
|
3,
|
|
@@ -20030,7 +20328,7 @@ var DISTRIBUTION_F = [
|
|
|
20030
20328
|
...["BINOM.INV", "CRITBINOM"].map(
|
|
20031
20329
|
(name) => numeric(
|
|
20032
20330
|
name,
|
|
20033
|
-
|
|
20331
|
+
C27,
|
|
20034
20332
|
`${name}(trials, probability_s, alpha)`,
|
|
20035
20333
|
"The smallest value whose cumulative binomial distribution reaches the criterion.",
|
|
20036
20334
|
3,
|
|
@@ -20040,7 +20338,7 @@ var DISTRIBUTION_F = [
|
|
|
20040
20338
|
),
|
|
20041
20339
|
numeric(
|
|
20042
20340
|
"BINOM.DIST.RANGE",
|
|
20043
|
-
|
|
20341
|
+
C27,
|
|
20044
20342
|
"BINOM.DIST.RANGE(trials, probability_s, number_s, [number_s2])",
|
|
20045
20343
|
"The probability of a trial result within a range, from the binomial distribution.",
|
|
20046
20344
|
3,
|
|
@@ -20058,7 +20356,7 @@ var DISTRIBUTION_F = [
|
|
|
20058
20356
|
),
|
|
20059
20357
|
numeric(
|
|
20060
20358
|
"HYPGEOMDIST",
|
|
20061
|
-
|
|
20359
|
+
C27,
|
|
20062
20360
|
"HYPGEOMDIST(sample_s, number_sample, population_s, number_pop)",
|
|
20063
20361
|
"The hypergeometric distribution.",
|
|
20064
20362
|
4,
|
|
@@ -20067,7 +20365,7 @@ var DISTRIBUTION_F = [
|
|
|
20067
20365
|
),
|
|
20068
20366
|
numeric(
|
|
20069
20367
|
"NEGBINOMDIST",
|
|
20070
|
-
|
|
20368
|
+
C27,
|
|
20071
20369
|
"NEGBINOMDIST(number_f, number_s, probability_s)",
|
|
20072
20370
|
"The negative binomial distribution.",
|
|
20073
20371
|
3,
|
|
@@ -20077,7 +20375,7 @@ var DISTRIBUTION_F = [
|
|
|
20077
20375
|
];
|
|
20078
20376
|
|
|
20079
20377
|
// xlsx/formula/functions/statistical-shape.ts
|
|
20080
|
-
var
|
|
20378
|
+
var C28 = "Statistical";
|
|
20081
20379
|
function moments(values2) {
|
|
20082
20380
|
const n = values2.length;
|
|
20083
20381
|
return { n, m: mean(values2), s: stdev(values2, true) };
|
|
@@ -20094,7 +20392,7 @@ function frequency(data, bins) {
|
|
|
20094
20392
|
var STATISTICAL_SHAPE = [
|
|
20095
20393
|
spec(
|
|
20096
20394
|
"GEOMEAN",
|
|
20097
|
-
|
|
20395
|
+
C28,
|
|
20098
20396
|
"GEOMEAN(number1, ...)",
|
|
20099
20397
|
"The geometric mean.",
|
|
20100
20398
|
1,
|
|
@@ -20108,7 +20406,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20108
20406
|
),
|
|
20109
20407
|
spec(
|
|
20110
20408
|
"HARMEAN",
|
|
20111
|
-
|
|
20409
|
+
C28,
|
|
20112
20410
|
"HARMEAN(number1, ...)",
|
|
20113
20411
|
"The harmonic mean.",
|
|
20114
20412
|
1,
|
|
@@ -20122,7 +20420,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20122
20420
|
),
|
|
20123
20421
|
spec(
|
|
20124
20422
|
"AVEDEV",
|
|
20125
|
-
|
|
20423
|
+
C28,
|
|
20126
20424
|
"AVEDEV(number1, ...)",
|
|
20127
20425
|
"The mean absolute deviation from the mean.",
|
|
20128
20426
|
1,
|
|
@@ -20137,7 +20435,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20137
20435
|
),
|
|
20138
20436
|
spec(
|
|
20139
20437
|
"DEVSQ",
|
|
20140
|
-
|
|
20438
|
+
C28,
|
|
20141
20439
|
"DEVSQ(number1, ...)",
|
|
20142
20440
|
"The sum of squared deviations from the mean.",
|
|
20143
20441
|
1,
|
|
@@ -20150,7 +20448,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20150
20448
|
),
|
|
20151
20449
|
spec(
|
|
20152
20450
|
"KURT",
|
|
20153
|
-
|
|
20451
|
+
C28,
|
|
20154
20452
|
"KURT(number1, ...)",
|
|
20155
20453
|
"The kurtosis of a data set.",
|
|
20156
20454
|
1,
|
|
@@ -20166,7 +20464,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20166
20464
|
),
|
|
20167
20465
|
spec(
|
|
20168
20466
|
"SKEW",
|
|
20169
|
-
|
|
20467
|
+
C28,
|
|
20170
20468
|
"SKEW(number1, ...)",
|
|
20171
20469
|
"The skewness of a distribution.",
|
|
20172
20470
|
1,
|
|
@@ -20181,7 +20479,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20181
20479
|
),
|
|
20182
20480
|
spec(
|
|
20183
20481
|
"SKEW.P",
|
|
20184
|
-
|
|
20482
|
+
C28,
|
|
20185
20483
|
"SKEW.P(number1, ...)",
|
|
20186
20484
|
"The population skewness.",
|
|
20187
20485
|
1,
|
|
@@ -20197,7 +20495,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20197
20495
|
),
|
|
20198
20496
|
numeric(
|
|
20199
20497
|
"STANDARDIZE",
|
|
20200
|
-
|
|
20498
|
+
C28,
|
|
20201
20499
|
"STANDARDIZE(x, mean, standard_dev)",
|
|
20202
20500
|
"A normalized value.",
|
|
20203
20501
|
3,
|
|
@@ -20209,7 +20507,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20209
20507
|
),
|
|
20210
20508
|
spec(
|
|
20211
20509
|
"TRIMMEAN",
|
|
20212
|
-
|
|
20510
|
+
C28,
|
|
20213
20511
|
"TRIMMEAN(array, percent)",
|
|
20214
20512
|
"The mean of the interior of a data set.",
|
|
20215
20513
|
2,
|
|
@@ -20225,7 +20523,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20225
20523
|
),
|
|
20226
20524
|
spec(
|
|
20227
20525
|
"FREQUENCY",
|
|
20228
|
-
|
|
20526
|
+
C28,
|
|
20229
20527
|
"FREQUENCY(data_array, bins_array)",
|
|
20230
20528
|
"How often values occur within ranges, as a vertical array.",
|
|
20231
20529
|
2,
|
|
@@ -20235,7 +20533,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20235
20533
|
),
|
|
20236
20534
|
numeric(
|
|
20237
20535
|
"PERMUT",
|
|
20238
|
-
|
|
20536
|
+
C28,
|
|
20239
20537
|
"PERMUT(number, number_chosen)",
|
|
20240
20538
|
"The number of permutations.",
|
|
20241
20539
|
2,
|
|
@@ -20251,7 +20549,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20251
20549
|
),
|
|
20252
20550
|
numeric(
|
|
20253
20551
|
"PERMUTATIONA",
|
|
20254
|
-
|
|
20552
|
+
C28,
|
|
20255
20553
|
"PERMUTATIONA(number, number_chosen)",
|
|
20256
20554
|
"Permutations with repetitions.",
|
|
20257
20555
|
2,
|
|
@@ -20261,26 +20559,26 @@ var STATISTICAL_SHAPE = [
|
|
|
20261
20559
|
return Math.pow(Math.trunc(n), Math.trunc(k ?? 0));
|
|
20262
20560
|
}
|
|
20263
20561
|
),
|
|
20264
|
-
numeric("FISHER",
|
|
20562
|
+
numeric("FISHER", C28, "FISHER(x)", "The Fisher transformation.", 1, 1, (x) => {
|
|
20265
20563
|
if (x <= -1 || x >= 1) fail(ERR.NUM);
|
|
20266
20564
|
return 0.5 * Math.log((1 + x) / (1 - x));
|
|
20267
20565
|
}),
|
|
20268
20566
|
numeric(
|
|
20269
20567
|
"FISHERINV",
|
|
20270
|
-
|
|
20568
|
+
C28,
|
|
20271
20569
|
"FISHERINV(y)",
|
|
20272
20570
|
"The inverse of the Fisher transformation.",
|
|
20273
20571
|
1,
|
|
20274
20572
|
1,
|
|
20275
20573
|
(y) => Math.tanh(y)
|
|
20276
20574
|
),
|
|
20277
|
-
numeric("GAMMA",
|
|
20575
|
+
numeric("GAMMA", C28, "GAMMA(number)", "The gamma function value.", 1, 1, (x) => {
|
|
20278
20576
|
if (x <= 0 && Number.isInteger(x)) fail(ERR.NUM);
|
|
20279
20577
|
return gamma(x);
|
|
20280
20578
|
}),
|
|
20281
20579
|
numeric(
|
|
20282
20580
|
"GAMMALN",
|
|
20283
|
-
|
|
20581
|
+
C28,
|
|
20284
20582
|
"GAMMALN(x)",
|
|
20285
20583
|
"The natural logarithm of the gamma function.",
|
|
20286
20584
|
1,
|
|
@@ -20289,7 +20587,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20289
20587
|
),
|
|
20290
20588
|
numeric(
|
|
20291
20589
|
"GAMMALN.PRECISE",
|
|
20292
|
-
|
|
20590
|
+
C28,
|
|
20293
20591
|
"GAMMALN.PRECISE(x)",
|
|
20294
20592
|
"The natural logarithm of the gamma function.",
|
|
20295
20593
|
1,
|
|
@@ -20299,7 +20597,7 @@ var STATISTICAL_SHAPE = [
|
|
|
20299
20597
|
];
|
|
20300
20598
|
|
|
20301
20599
|
// xlsx/formula/functions/statistical-more.ts
|
|
20302
|
-
var
|
|
20600
|
+
var C29 = "Statistical";
|
|
20303
20601
|
function pairedNumbers(ctx, a2, b) {
|
|
20304
20602
|
const ma = ctx.toMatrix(a2).flat();
|
|
20305
20603
|
const mb = ctx.toMatrix(b).flat();
|
|
@@ -20320,7 +20618,7 @@ function pairedNumbers(ctx, a2, b) {
|
|
|
20320
20618
|
}
|
|
20321
20619
|
var pairFn = (name, description, syntax, fn) => spec(
|
|
20322
20620
|
name,
|
|
20323
|
-
|
|
20621
|
+
C29,
|
|
20324
20622
|
syntax,
|
|
20325
20623
|
description,
|
|
20326
20624
|
2,
|
|
@@ -20335,7 +20633,7 @@ var STATISTICAL_MORE = [
|
|
|
20335
20633
|
...STATISTICAL_SHAPE,
|
|
20336
20634
|
spec(
|
|
20337
20635
|
"MODE.MULT",
|
|
20338
|
-
|
|
20636
|
+
C29,
|
|
20339
20637
|
"MODE.MULT(number1, [number2], ...)",
|
|
20340
20638
|
"A vertical array of the most frequent values.",
|
|
20341
20639
|
1,
|
|
@@ -20417,7 +20715,7 @@ var STATISTICAL_MORE = [
|
|
|
20417
20715
|
...["FORECAST", "FORECAST.LINEAR"].map(
|
|
20418
20716
|
(name) => spec(
|
|
20419
20717
|
name,
|
|
20420
|
-
|
|
20718
|
+
C29,
|
|
20421
20719
|
`${name}(x, known_ys, known_xs)`,
|
|
20422
20720
|
"Predicts a value along a linear trend.",
|
|
20423
20721
|
3,
|
|
@@ -20434,7 +20732,7 @@ var STATISTICAL_MORE = [
|
|
|
20434
20732
|
];
|
|
20435
20733
|
|
|
20436
20734
|
// xlsx/formula/functions/hypothesis-tests.ts
|
|
20437
|
-
var
|
|
20735
|
+
var C30 = "Statistical";
|
|
20438
20736
|
var ARRAYS = ["any"];
|
|
20439
20737
|
var numbersOf3 = (ctx, value2) => collectNumbers(ctx, [value2 ?? null]);
|
|
20440
20738
|
function tStatistic(a2, b, type) {
|
|
@@ -20519,7 +20817,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20519
20817
|
["Z.TEST", "ZTEST"],
|
|
20520
20818
|
(name) => spec(
|
|
20521
20819
|
name,
|
|
20522
|
-
|
|
20820
|
+
C30,
|
|
20523
20821
|
`${name}(array, x, [sigma])`,
|
|
20524
20822
|
"The one-tailed P-value of a z-test.",
|
|
20525
20823
|
2,
|
|
@@ -20538,7 +20836,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20538
20836
|
["T.TEST", "TTEST"],
|
|
20539
20837
|
(name) => spec(
|
|
20540
20838
|
name,
|
|
20541
|
-
|
|
20839
|
+
C30,
|
|
20542
20840
|
`${name}(array1, array2, tails, type)`,
|
|
20543
20841
|
"The probability associated with a Student's t-test.",
|
|
20544
20842
|
4,
|
|
@@ -20559,7 +20857,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20559
20857
|
["F.TEST", "FTEST"],
|
|
20560
20858
|
(name) => spec(
|
|
20561
20859
|
name,
|
|
20562
|
-
|
|
20860
|
+
C30,
|
|
20563
20861
|
`${name}(array1, array2)`,
|
|
20564
20862
|
"The two-tailed probability that the variances of two arrays are not different.",
|
|
20565
20863
|
2,
|
|
@@ -20572,7 +20870,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20572
20870
|
["CHISQ.TEST", "CHITEST"],
|
|
20573
20871
|
(name) => spec(
|
|
20574
20872
|
name,
|
|
20575
|
-
|
|
20873
|
+
C30,
|
|
20576
20874
|
`${name}(actual_range, expected_range)`,
|
|
20577
20875
|
"The chi-squared test of independence.",
|
|
20578
20876
|
2,
|
|
@@ -20583,7 +20881,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20583
20881
|
),
|
|
20584
20882
|
spec(
|
|
20585
20883
|
"PROB",
|
|
20586
|
-
|
|
20884
|
+
C30,
|
|
20587
20885
|
"PROB(x_range, prob_range, lower_limit, [upper_limit])",
|
|
20588
20886
|
"The probability that values in a range are between two limits.",
|
|
20589
20887
|
3,
|
|
@@ -20594,7 +20892,7 @@ var HYPOTHESIS_TESTS = [
|
|
|
20594
20892
|
];
|
|
20595
20893
|
|
|
20596
20894
|
// xlsx/formula/functions/statistical-spread.ts
|
|
20597
|
-
var
|
|
20895
|
+
var C31 = "Statistical";
|
|
20598
20896
|
var STATISTICAL_SPREAD = [
|
|
20599
20897
|
...[
|
|
20600
20898
|
["STDEV", true, false],
|
|
@@ -20606,7 +20904,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20606
20904
|
].map(
|
|
20607
20905
|
([name, sample, a2]) => spec(
|
|
20608
20906
|
name,
|
|
20609
|
-
|
|
20907
|
+
C31,
|
|
20610
20908
|
`${name}(number1, [number2], ...)`,
|
|
20611
20909
|
`The ${sample ? "sample" : "population"} standard deviation${a2 ? " counting logicals and text" : ""}.`,
|
|
20612
20910
|
1,
|
|
@@ -20625,7 +20923,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20625
20923
|
].map(
|
|
20626
20924
|
([name, sample, a2]) => spec(
|
|
20627
20925
|
name,
|
|
20628
|
-
|
|
20926
|
+
C31,
|
|
20629
20927
|
`${name}(number1, [number2], ...)`,
|
|
20630
20928
|
`The ${sample ? "sample" : "population"} variance${a2 ? " counting logicals and text" : ""}.`,
|
|
20631
20929
|
1,
|
|
@@ -20637,7 +20935,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20637
20935
|
...["PERCENTILE", "PERCENTILE.INC", "PERCENTILE.EXC"].map(
|
|
20638
20936
|
(name) => spec(
|
|
20639
20937
|
name,
|
|
20640
|
-
|
|
20938
|
+
C31,
|
|
20641
20939
|
`${name}(array, k)`,
|
|
20642
20940
|
"The k-th percentile.",
|
|
20643
20941
|
2,
|
|
@@ -20653,7 +20951,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20653
20951
|
...["QUARTILE", "QUARTILE.INC", "QUARTILE.EXC"].map(
|
|
20654
20952
|
(name) => spec(
|
|
20655
20953
|
name,
|
|
20656
|
-
|
|
20954
|
+
C31,
|
|
20657
20955
|
`${name}(array, quart)`,
|
|
20658
20956
|
"A quartile of a data set.",
|
|
20659
20957
|
2,
|
|
@@ -20665,7 +20963,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20665
20963
|
...["PERCENTRANK", "PERCENTRANK.INC", "PERCENTRANK.EXC"].map(
|
|
20666
20964
|
(name) => spec(
|
|
20667
20965
|
name,
|
|
20668
|
-
|
|
20966
|
+
C31,
|
|
20669
20967
|
`${name}(array, x, [significance])`,
|
|
20670
20968
|
"The rank of a value as a percentage of the data set.",
|
|
20671
20969
|
2,
|
|
@@ -20682,7 +20980,7 @@ var STATISTICAL_SPREAD = [
|
|
|
20682
20980
|
];
|
|
20683
20981
|
|
|
20684
20982
|
// xlsx/formula/functions/statistical-count.ts
|
|
20685
|
-
var
|
|
20983
|
+
var C32 = "Statistical";
|
|
20686
20984
|
function count(ctx, args) {
|
|
20687
20985
|
let n = 0;
|
|
20688
20986
|
for (const arg of args) {
|
|
@@ -20748,7 +21046,7 @@ function countIf(ctx, range, criteria) {
|
|
|
20748
21046
|
var COUNT_FUNCTIONS = [
|
|
20749
21047
|
spec(
|
|
20750
21048
|
"COUNT",
|
|
20751
|
-
|
|
21049
|
+
C32,
|
|
20752
21050
|
"COUNT(value1, [value2], ...)",
|
|
20753
21051
|
"Counts the numbers in the arguments.",
|
|
20754
21052
|
0,
|
|
@@ -20758,7 +21056,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20758
21056
|
),
|
|
20759
21057
|
spec(
|
|
20760
21058
|
"COUNTA",
|
|
20761
|
-
|
|
21059
|
+
C32,
|
|
20762
21060
|
"COUNTA(value1, [value2], ...)",
|
|
20763
21061
|
"Counts the non-empty values.",
|
|
20764
21062
|
1,
|
|
@@ -20768,7 +21066,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20768
21066
|
),
|
|
20769
21067
|
spec(
|
|
20770
21068
|
"COUNTBLANK",
|
|
20771
|
-
|
|
21069
|
+
C32,
|
|
20772
21070
|
"COUNTBLANK(range)",
|
|
20773
21071
|
"Counts the empty cells in a range.",
|
|
20774
21072
|
1,
|
|
@@ -20778,7 +21076,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20778
21076
|
),
|
|
20779
21077
|
spec(
|
|
20780
21078
|
"COUNTIF",
|
|
20781
|
-
|
|
21079
|
+
C32,
|
|
20782
21080
|
"COUNTIF(range, criteria)",
|
|
20783
21081
|
"Counts the cells that meet a criterion.",
|
|
20784
21082
|
2,
|
|
@@ -20788,7 +21086,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20788
21086
|
),
|
|
20789
21087
|
spec(
|
|
20790
21088
|
"COUNTIFS",
|
|
20791
|
-
|
|
21089
|
+
C32,
|
|
20792
21090
|
"COUNTIFS(criteria_range1, criteria1, ...)",
|
|
20793
21091
|
"Counts the cells that meet several criteria.",
|
|
20794
21092
|
2,
|
|
@@ -20801,7 +21099,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20801
21099
|
),
|
|
20802
21100
|
spec(
|
|
20803
21101
|
"AVERAGE",
|
|
20804
|
-
|
|
21102
|
+
C32,
|
|
20805
21103
|
"AVERAGE(number1, [number2], ...)",
|
|
20806
21104
|
"The arithmetic mean.",
|
|
20807
21105
|
1,
|
|
@@ -20812,7 +21110,7 @@ var COUNT_FUNCTIONS = [
|
|
|
20812
21110
|
];
|
|
20813
21111
|
|
|
20814
21112
|
// xlsx/formula/functions/statistical.ts
|
|
20815
|
-
var
|
|
21113
|
+
var C33 = "Statistical";
|
|
20816
21114
|
var numbersOf4 = (values2) => values2.filter((v) => typeof v === "number");
|
|
20817
21115
|
var extreme2 = extreme;
|
|
20818
21116
|
var STATISTICAL_FUNCTIONS = [
|
|
@@ -20823,7 +21121,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20823
21121
|
...COUNT_FUNCTIONS,
|
|
20824
21122
|
spec(
|
|
20825
21123
|
"AVERAGEA",
|
|
20826
|
-
|
|
21124
|
+
C33,
|
|
20827
21125
|
"AVERAGEA(value1, [value2], ...)",
|
|
20828
21126
|
"The mean counting text as 0 and logicals.",
|
|
20829
21127
|
1,
|
|
@@ -20833,7 +21131,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20833
21131
|
),
|
|
20834
21132
|
spec(
|
|
20835
21133
|
"AVERAGEIF",
|
|
20836
|
-
|
|
21134
|
+
C33,
|
|
20837
21135
|
"AVERAGEIF(range, criteria, [average_range])",
|
|
20838
21136
|
"The mean of the cells that meet a criterion.",
|
|
20839
21137
|
2,
|
|
@@ -20852,7 +21150,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20852
21150
|
),
|
|
20853
21151
|
spec(
|
|
20854
21152
|
"AVERAGEIFS",
|
|
20855
|
-
|
|
21153
|
+
C33,
|
|
20856
21154
|
"AVERAGEIFS(average_range, criteria_range1, criteria1, ...)",
|
|
20857
21155
|
"The mean of the cells that meet several criteria.",
|
|
20858
21156
|
3,
|
|
@@ -20866,7 +21164,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20866
21164
|
),
|
|
20867
21165
|
spec(
|
|
20868
21166
|
"MAX",
|
|
20869
|
-
|
|
21167
|
+
C33,
|
|
20870
21168
|
"MAX(number1, [number2], ...)",
|
|
20871
21169
|
"The largest value.",
|
|
20872
21170
|
1,
|
|
@@ -20876,7 +21174,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20876
21174
|
),
|
|
20877
21175
|
spec(
|
|
20878
21176
|
"MIN",
|
|
20879
|
-
|
|
21177
|
+
C33,
|
|
20880
21178
|
"MIN(number1, [number2], ...)",
|
|
20881
21179
|
"The smallest value.",
|
|
20882
21180
|
1,
|
|
@@ -20886,7 +21184,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20886
21184
|
),
|
|
20887
21185
|
spec(
|
|
20888
21186
|
"MAXA",
|
|
20889
|
-
|
|
21187
|
+
C33,
|
|
20890
21188
|
"MAXA(value1, [value2], ...)",
|
|
20891
21189
|
"The largest value counting logicals and text.",
|
|
20892
21190
|
1,
|
|
@@ -20896,7 +21194,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20896
21194
|
),
|
|
20897
21195
|
spec(
|
|
20898
21196
|
"MINA",
|
|
20899
|
-
|
|
21197
|
+
C33,
|
|
20900
21198
|
"MINA(value1, [value2], ...)",
|
|
20901
21199
|
"The smallest value counting logicals and text.",
|
|
20902
21200
|
1,
|
|
@@ -20906,7 +21204,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20906
21204
|
),
|
|
20907
21205
|
spec(
|
|
20908
21206
|
"MAXIFS",
|
|
20909
|
-
|
|
21207
|
+
C33,
|
|
20910
21208
|
"MAXIFS(max_range, criteria_range1, criteria1, ...)",
|
|
20911
21209
|
"The largest value meeting criteria.",
|
|
20912
21210
|
3,
|
|
@@ -20920,7 +21218,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20920
21218
|
),
|
|
20921
21219
|
spec(
|
|
20922
21220
|
"MINIFS",
|
|
20923
|
-
|
|
21221
|
+
C33,
|
|
20924
21222
|
"MINIFS(min_range, criteria_range1, criteria1, ...)",
|
|
20925
21223
|
"The smallest value meeting criteria.",
|
|
20926
21224
|
3,
|
|
@@ -20934,7 +21232,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20934
21232
|
),
|
|
20935
21233
|
spec(
|
|
20936
21234
|
"MEDIAN",
|
|
20937
|
-
|
|
21235
|
+
C33,
|
|
20938
21236
|
"MEDIAN(number1, [number2], ...)",
|
|
20939
21237
|
"The median.",
|
|
20940
21238
|
1,
|
|
@@ -20944,7 +21242,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20944
21242
|
),
|
|
20945
21243
|
spec(
|
|
20946
21244
|
"MODE",
|
|
20947
|
-
|
|
21245
|
+
C33,
|
|
20948
21246
|
"MODE(number1, [number2], ...)",
|
|
20949
21247
|
"The most frequent value.",
|
|
20950
21248
|
1,
|
|
@@ -20954,7 +21252,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20954
21252
|
),
|
|
20955
21253
|
spec(
|
|
20956
21254
|
"MODE.SNGL",
|
|
20957
|
-
|
|
21255
|
+
C33,
|
|
20958
21256
|
"MODE.SNGL(number1, [number2], ...)",
|
|
20959
21257
|
"The most frequent value.",
|
|
20960
21258
|
1,
|
|
@@ -20964,7 +21262,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20964
21262
|
),
|
|
20965
21263
|
spec(
|
|
20966
21264
|
"LARGE",
|
|
20967
|
-
|
|
21265
|
+
C33,
|
|
20968
21266
|
"LARGE(array, k)",
|
|
20969
21267
|
"The k-th largest value.",
|
|
20970
21268
|
2,
|
|
@@ -20974,7 +21272,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20974
21272
|
),
|
|
20975
21273
|
spec(
|
|
20976
21274
|
"SMALL",
|
|
20977
|
-
|
|
21275
|
+
C33,
|
|
20978
21276
|
"SMALL(array, k)",
|
|
20979
21277
|
"The k-th smallest value.",
|
|
20980
21278
|
2,
|
|
@@ -20985,7 +21283,7 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
20985
21283
|
...["RANK", "RANK.EQ", "RANK.AVG"].map(
|
|
20986
21284
|
(name) => spec(
|
|
20987
21285
|
name,
|
|
20988
|
-
|
|
21286
|
+
C33,
|
|
20989
21287
|
`${name}(number, ref, [order])`,
|
|
20990
21288
|
"The rank of a number in a list.",
|
|
20991
21289
|
2,
|
|
@@ -21002,11 +21300,11 @@ var STATISTICAL_FUNCTIONS = [
|
|
|
21002
21300
|
];
|
|
21003
21301
|
|
|
21004
21302
|
// xlsx/formula/functions/distributions-more.ts
|
|
21005
|
-
var
|
|
21303
|
+
var C34 = "Statistical";
|
|
21006
21304
|
var DISTRIBUTION_MORE = [
|
|
21007
21305
|
numeric(
|
|
21008
21306
|
"T.DIST",
|
|
21009
|
-
|
|
21307
|
+
C34,
|
|
21010
21308
|
"T.DIST(x, deg_freedom, cumulative)",
|
|
21011
21309
|
"Student's left-tailed t-distribution.",
|
|
21012
21310
|
3,
|
|
@@ -21018,7 +21316,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21018
21316
|
),
|
|
21019
21317
|
numeric(
|
|
21020
21318
|
"T.DIST.RT",
|
|
21021
|
-
|
|
21319
|
+
C34,
|
|
21022
21320
|
"T.DIST.RT(x, deg_freedom)",
|
|
21023
21321
|
"Student's right-tailed t-distribution.",
|
|
21024
21322
|
2,
|
|
@@ -21030,7 +21328,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21030
21328
|
),
|
|
21031
21329
|
numeric(
|
|
21032
21330
|
"T.DIST.2T",
|
|
21033
|
-
|
|
21331
|
+
C34,
|
|
21034
21332
|
"T.DIST.2T(x, deg_freedom)",
|
|
21035
21333
|
"Student's two-tailed t-distribution.",
|
|
21036
21334
|
2,
|
|
@@ -21042,7 +21340,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21042
21340
|
),
|
|
21043
21341
|
numeric(
|
|
21044
21342
|
"TDIST",
|
|
21045
|
-
|
|
21343
|
+
C34,
|
|
21046
21344
|
"TDIST(x, deg_freedom, tails)",
|
|
21047
21345
|
"Student's t-distribution.",
|
|
21048
21346
|
3,
|
|
@@ -21054,7 +21352,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21054
21352
|
),
|
|
21055
21353
|
numeric(
|
|
21056
21354
|
"T.INV",
|
|
21057
|
-
|
|
21355
|
+
C34,
|
|
21058
21356
|
"T.INV(probability, deg_freedom)",
|
|
21059
21357
|
"The left-tailed inverse of Student's t-distribution.",
|
|
21060
21358
|
2,
|
|
@@ -21069,7 +21367,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21069
21367
|
...["T.INV.2T", "TINV"].map(
|
|
21070
21368
|
(name) => numeric(
|
|
21071
21369
|
name,
|
|
21072
|
-
|
|
21370
|
+
C34,
|
|
21073
21371
|
`${name}(probability, deg_freedom)`,
|
|
21074
21372
|
"The two-tailed inverse of Student's t-distribution.",
|
|
21075
21373
|
2,
|
|
@@ -21082,7 +21380,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21082
21380
|
),
|
|
21083
21381
|
numeric(
|
|
21084
21382
|
"CHISQ.DIST",
|
|
21085
|
-
|
|
21383
|
+
C34,
|
|
21086
21384
|
"CHISQ.DIST(x, deg_freedom, cumulative)",
|
|
21087
21385
|
"The chi-squared distribution.",
|
|
21088
21386
|
3,
|
|
@@ -21096,7 +21394,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21096
21394
|
...["CHISQ.DIST.RT", "CHIDIST"].map(
|
|
21097
21395
|
(name) => numeric(
|
|
21098
21396
|
name,
|
|
21099
|
-
|
|
21397
|
+
C34,
|
|
21100
21398
|
`${name}(x, deg_freedom)`,
|
|
21101
21399
|
"The right-tailed chi-squared probability.",
|
|
21102
21400
|
2,
|
|
@@ -21109,7 +21407,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21109
21407
|
),
|
|
21110
21408
|
numeric(
|
|
21111
21409
|
"CHISQ.INV",
|
|
21112
|
-
|
|
21410
|
+
C34,
|
|
21113
21411
|
"CHISQ.INV(probability, deg_freedom)",
|
|
21114
21412
|
"The inverse of the left-tailed chi-squared distribution.",
|
|
21115
21413
|
2,
|
|
@@ -21122,7 +21420,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21122
21420
|
...["CHISQ.INV.RT", "CHIINV"].map(
|
|
21123
21421
|
(name) => numeric(
|
|
21124
21422
|
name,
|
|
21125
|
-
|
|
21423
|
+
C34,
|
|
21126
21424
|
`${name}(probability, deg_freedom)`,
|
|
21127
21425
|
"The inverse of the right-tailed chi-squared distribution.",
|
|
21128
21426
|
2,
|
|
@@ -21135,7 +21433,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21135
21433
|
),
|
|
21136
21434
|
numeric(
|
|
21137
21435
|
"BETA.DIST",
|
|
21138
|
-
|
|
21436
|
+
C34,
|
|
21139
21437
|
"BETA.DIST(x, alpha, beta, cumulative, [A], [B])",
|
|
21140
21438
|
"The beta distribution.",
|
|
21141
21439
|
4,
|
|
@@ -21155,7 +21453,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21155
21453
|
),
|
|
21156
21454
|
numeric(
|
|
21157
21455
|
"NEGBINOM.DIST",
|
|
21158
|
-
|
|
21456
|
+
C34,
|
|
21159
21457
|
"NEGBINOM.DIST(number_f, number_s, probability_s, cumulative)",
|
|
21160
21458
|
"The negative binomial distribution.",
|
|
21161
21459
|
4,
|
|
@@ -21174,7 +21472,7 @@ var DISTRIBUTION_MORE = [
|
|
|
21174
21472
|
),
|
|
21175
21473
|
numeric(
|
|
21176
21474
|
"HYPGEOM.DIST",
|
|
21177
|
-
|
|
21475
|
+
C34,
|
|
21178
21476
|
"HYPGEOM.DIST(sample_s, number_sample, population_s, number_pop, cumulative)",
|
|
21179
21477
|
"The hypergeometric distribution.",
|
|
21180
21478
|
5,
|
|
@@ -21195,13 +21493,13 @@ var DISTRIBUTION_MORE = [
|
|
|
21195
21493
|
];
|
|
21196
21494
|
|
|
21197
21495
|
// xlsx/formula/functions/distributions.ts
|
|
21198
|
-
var
|
|
21496
|
+
var C35 = "Statistical";
|
|
21199
21497
|
var DISTRIBUTION_FUNCTIONS = [
|
|
21200
21498
|
...DISTRIBUTION_MORE,
|
|
21201
21499
|
...DISTRIBUTION_F,
|
|
21202
21500
|
numeric(
|
|
21203
21501
|
"NORM.DIST",
|
|
21204
|
-
|
|
21502
|
+
C35,
|
|
21205
21503
|
"NORM.DIST(x, mean, standard_dev, cumulative)",
|
|
21206
21504
|
"The normal distribution.",
|
|
21207
21505
|
4,
|
|
@@ -21210,7 +21508,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21210
21508
|
),
|
|
21211
21509
|
numeric(
|
|
21212
21510
|
"NORMDIST",
|
|
21213
|
-
|
|
21511
|
+
C35,
|
|
21214
21512
|
"NORMDIST(x, mean, standard_dev, cumulative)",
|
|
21215
21513
|
"The normal distribution.",
|
|
21216
21514
|
4,
|
|
@@ -21219,7 +21517,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21219
21517
|
),
|
|
21220
21518
|
numeric(
|
|
21221
21519
|
"NORM.S.DIST",
|
|
21222
|
-
|
|
21520
|
+
C35,
|
|
21223
21521
|
"NORM.S.DIST(z, cumulative)",
|
|
21224
21522
|
"The standard normal distribution.",
|
|
21225
21523
|
2,
|
|
@@ -21228,7 +21526,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21228
21526
|
),
|
|
21229
21527
|
numeric(
|
|
21230
21528
|
"NORMSDIST",
|
|
21231
|
-
|
|
21529
|
+
C35,
|
|
21232
21530
|
"NORMSDIST(z)",
|
|
21233
21531
|
"The standard normal cumulative distribution.",
|
|
21234
21532
|
1,
|
|
@@ -21237,7 +21535,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21237
21535
|
),
|
|
21238
21536
|
numeric(
|
|
21239
21537
|
"NORM.INV",
|
|
21240
|
-
|
|
21538
|
+
C35,
|
|
21241
21539
|
"NORM.INV(probability, mean, standard_dev)",
|
|
21242
21540
|
"The inverse of the normal cumulative distribution.",
|
|
21243
21541
|
3,
|
|
@@ -21249,7 +21547,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21249
21547
|
),
|
|
21250
21548
|
numeric(
|
|
21251
21549
|
"NORMINV",
|
|
21252
|
-
|
|
21550
|
+
C35,
|
|
21253
21551
|
"NORMINV(probability, mean, standard_dev)",
|
|
21254
21552
|
"The inverse of the normal cumulative distribution.",
|
|
21255
21553
|
3,
|
|
@@ -21261,7 +21559,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21261
21559
|
),
|
|
21262
21560
|
numeric(
|
|
21263
21561
|
"NORM.S.INV",
|
|
21264
|
-
|
|
21562
|
+
C35,
|
|
21265
21563
|
"NORM.S.INV(probability)",
|
|
21266
21564
|
"The inverse of the standard normal distribution.",
|
|
21267
21565
|
1,
|
|
@@ -21270,17 +21568,17 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21270
21568
|
),
|
|
21271
21569
|
numeric(
|
|
21272
21570
|
"NORMSINV",
|
|
21273
|
-
|
|
21571
|
+
C35,
|
|
21274
21572
|
"NORMSINV(probability)",
|
|
21275
21573
|
"The inverse of the standard normal distribution.",
|
|
21276
21574
|
1,
|
|
21277
21575
|
1,
|
|
21278
21576
|
normInv
|
|
21279
21577
|
),
|
|
21280
|
-
numeric("PHI",
|
|
21578
|
+
numeric("PHI", C35, "PHI(x)", "The standard normal density.", 1, 1, normPdf),
|
|
21281
21579
|
numeric(
|
|
21282
21580
|
"GAUSS",
|
|
21283
|
-
|
|
21581
|
+
C35,
|
|
21284
21582
|
"GAUSS(z)",
|
|
21285
21583
|
"The probability between the mean and z standard deviations.",
|
|
21286
21584
|
1,
|
|
@@ -21318,7 +21616,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21318
21616
|
...["CONFIDENCE", "CONFIDENCE.NORM"].map(
|
|
21319
21617
|
(name) => numeric(
|
|
21320
21618
|
name,
|
|
21321
|
-
|
|
21619
|
+
C35,
|
|
21322
21620
|
`${name}(alpha, standard_dev, size)`,
|
|
21323
21621
|
"The confidence interval for a population mean (normal).",
|
|
21324
21622
|
3,
|
|
@@ -21333,7 +21631,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21333
21631
|
),
|
|
21334
21632
|
numeric(
|
|
21335
21633
|
"CONFIDENCE.T",
|
|
21336
|
-
|
|
21634
|
+
C35,
|
|
21337
21635
|
"CONFIDENCE.T(alpha, standard_dev, size)",
|
|
21338
21636
|
"The confidence interval for a population mean (Student's t).",
|
|
21339
21637
|
3,
|
|
@@ -21349,7 +21647,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21349
21647
|
...["BINOM.DIST", "BINOMDIST"].map(
|
|
21350
21648
|
(name) => numeric(
|
|
21351
21649
|
name,
|
|
21352
|
-
|
|
21650
|
+
C35,
|
|
21353
21651
|
`${name}(number_s, trials, probability_s, cumulative)`,
|
|
21354
21652
|
"The binomial distribution probability.",
|
|
21355
21653
|
4,
|
|
@@ -21360,7 +21658,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21360
21658
|
...["POISSON.DIST", "POISSON"].map(
|
|
21361
21659
|
(name) => numeric(
|
|
21362
21660
|
name,
|
|
21363
|
-
|
|
21661
|
+
C35,
|
|
21364
21662
|
`${name}(x, mean, cumulative)`,
|
|
21365
21663
|
"The Poisson distribution.",
|
|
21366
21664
|
3,
|
|
@@ -21371,7 +21669,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21371
21669
|
...["EXPON.DIST", "EXPONDIST"].map(
|
|
21372
21670
|
(name) => numeric(
|
|
21373
21671
|
name,
|
|
21374
|
-
|
|
21672
|
+
C35,
|
|
21375
21673
|
`${name}(x, lambda, cumulative)`,
|
|
21376
21674
|
"The exponential distribution.",
|
|
21377
21675
|
3,
|
|
@@ -21385,7 +21683,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21385
21683
|
),
|
|
21386
21684
|
numeric(
|
|
21387
21685
|
"LOGNORM.DIST",
|
|
21388
|
-
|
|
21686
|
+
C35,
|
|
21389
21687
|
"LOGNORM.DIST(x, mean, standard_dev, cumulative)",
|
|
21390
21688
|
"The lognormal distribution.",
|
|
21391
21689
|
4,
|
|
@@ -21398,7 +21696,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21398
21696
|
),
|
|
21399
21697
|
numeric(
|
|
21400
21698
|
"LOGNORM.INV",
|
|
21401
|
-
|
|
21699
|
+
C35,
|
|
21402
21700
|
"LOGNORM.INV(probability, mean, standard_dev)",
|
|
21403
21701
|
"The inverse of the lognormal distribution.",
|
|
21404
21702
|
3,
|
|
@@ -21411,7 +21709,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21411
21709
|
...["WEIBULL.DIST", "WEIBULL"].map(
|
|
21412
21710
|
(name) => numeric(
|
|
21413
21711
|
name,
|
|
21414
|
-
|
|
21712
|
+
C35,
|
|
21415
21713
|
`${name}(x, alpha, beta, cumulative)`,
|
|
21416
21714
|
"The Weibull distribution.",
|
|
21417
21715
|
4,
|
|
@@ -21427,7 +21725,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21427
21725
|
),
|
|
21428
21726
|
numeric(
|
|
21429
21727
|
"GAMMA.DIST",
|
|
21430
|
-
|
|
21728
|
+
C35,
|
|
21431
21729
|
"GAMMA.DIST(x, alpha, beta, cumulative)",
|
|
21432
21730
|
"The gamma distribution.",
|
|
21433
21731
|
4,
|
|
@@ -21443,7 +21741,7 @@ var DISTRIBUTION_FUNCTIONS = [
|
|
|
21443
21741
|
];
|
|
21444
21742
|
|
|
21445
21743
|
// xlsx/formula/functions/text-convert.ts
|
|
21446
|
-
var
|
|
21744
|
+
var C36 = "Text";
|
|
21447
21745
|
var CP1252 = {
|
|
21448
21746
|
128: 8364,
|
|
21449
21747
|
130: 8218,
|
|
@@ -21488,7 +21786,7 @@ function fixed(value2, decimals, commas) {
|
|
|
21488
21786
|
var TEXT_CONVERT = [
|
|
21489
21787
|
spec(
|
|
21490
21788
|
"TEXT",
|
|
21491
|
-
|
|
21789
|
+
C36,
|
|
21492
21790
|
"TEXT(value, format_text)",
|
|
21493
21791
|
"Formats a value with a number format.",
|
|
21494
21792
|
2,
|
|
@@ -21501,7 +21799,7 @@ var TEXT_CONVERT = [
|
|
|
21501
21799
|
return formatValue(value2, str(args[1]), { date1904: ctx.date1904 }).text;
|
|
21502
21800
|
}
|
|
21503
21801
|
),
|
|
21504
|
-
spec("VALUE",
|
|
21802
|
+
spec("VALUE", C36, "VALUE(text)", "Converts text to a number.", 1, 1, (args) => {
|
|
21505
21803
|
const v = scalar(args[0]);
|
|
21506
21804
|
if (typeof v === "number") return v;
|
|
21507
21805
|
if (v === null) return 0;
|
|
@@ -21511,7 +21809,7 @@ var TEXT_CONVERT = [
|
|
|
21511
21809
|
}),
|
|
21512
21810
|
spec(
|
|
21513
21811
|
"NUMBERVALUE",
|
|
21514
|
-
|
|
21812
|
+
C36,
|
|
21515
21813
|
"NUMBERVALUE(text, [decimal_separator], [group_separator])",
|
|
21516
21814
|
"Converts text to a number with given separators.",
|
|
21517
21815
|
1,
|
|
@@ -21538,7 +21836,7 @@ var TEXT_CONVERT = [
|
|
|
21538
21836
|
),
|
|
21539
21837
|
spec(
|
|
21540
21838
|
"FIXED",
|
|
21541
|
-
|
|
21839
|
+
C36,
|
|
21542
21840
|
"FIXED(number, [decimals], [no_commas])",
|
|
21543
21841
|
"Formats a number as text with fixed decimals.",
|
|
21544
21842
|
1,
|
|
@@ -21547,7 +21845,7 @@ var TEXT_CONVERT = [
|
|
|
21547
21845
|
),
|
|
21548
21846
|
spec(
|
|
21549
21847
|
"DOLLAR",
|
|
21550
|
-
|
|
21848
|
+
C36,
|
|
21551
21849
|
"DOLLAR(number, [decimals])",
|
|
21552
21850
|
"Formats a number as currency text.",
|
|
21553
21851
|
1,
|
|
@@ -21558,28 +21856,28 @@ var TEXT_CONVERT = [
|
|
|
21558
21856
|
return value2 < 0 && text.replace(/[0.,]/g, "") !== "" ? `($${text})` : `$${text}`;
|
|
21559
21857
|
}
|
|
21560
21858
|
),
|
|
21561
|
-
spec("CHAR",
|
|
21859
|
+
spec("CHAR", C36, "CHAR(number)", "The character for a code (Windows-1252).", 1, 1, (args) => {
|
|
21562
21860
|
const n = int3(args[0]);
|
|
21563
21861
|
if (n < 1 || n > 255) fail(ERR.VALUE);
|
|
21564
21862
|
return String.fromCharCode(CP1252[n] ?? n);
|
|
21565
21863
|
}),
|
|
21566
|
-
spec("CODE",
|
|
21864
|
+
spec("CODE", C36, "CODE(text)", "The code of the first character (Windows-1252).", 1, 1, (args) => {
|
|
21567
21865
|
const text = str(args[0]);
|
|
21568
21866
|
if (text === "") fail(ERR.VALUE);
|
|
21569
21867
|
const code = text.charCodeAt(0);
|
|
21570
21868
|
return CP1252_REVERSE.get(code) ?? (code <= 255 ? code : 63);
|
|
21571
21869
|
}),
|
|
21572
|
-
spec("UNICHAR",
|
|
21870
|
+
spec("UNICHAR", C36, "UNICHAR(number)", "The Unicode character for a code point.", 1, 1, (args) => {
|
|
21573
21871
|
const n = int3(args[0]);
|
|
21574
21872
|
if (n < 1 || n > 1114111) fail(ERR.VALUE);
|
|
21575
21873
|
return String.fromCodePoint(n);
|
|
21576
21874
|
}),
|
|
21577
|
-
spec("UNICODE",
|
|
21875
|
+
spec("UNICODE", C36, "UNICODE(text)", "The code point of the first character.", 1, 1, (args) => {
|
|
21578
21876
|
const text = str(args[0]);
|
|
21579
21877
|
if (text === "") fail(ERR.VALUE);
|
|
21580
21878
|
return text.codePointAt(0) ?? fail(ERR.VALUE);
|
|
21581
21879
|
}),
|
|
21582
|
-
spec("T",
|
|
21880
|
+
spec("T", C36, "T(value)", "The text of a value, or empty text.", 1, 1, (args) => {
|
|
21583
21881
|
const v = scalar(args[0]);
|
|
21584
21882
|
if (isError(v)) return v;
|
|
21585
21883
|
return typeof v === "string" ? v : "";
|
|
@@ -21629,7 +21927,7 @@ function right(text, n) {
|
|
|
21629
21927
|
}
|
|
21630
21928
|
|
|
21631
21929
|
// xlsx/formula/functions/text.ts
|
|
21632
|
-
var
|
|
21930
|
+
var C37 = "Text";
|
|
21633
21931
|
var MAX_TEXT = 32767;
|
|
21634
21932
|
var limit = (text) => text.length > MAX_TEXT ? fail(ERR.VALUE) : text;
|
|
21635
21933
|
function find(args, insensitive) {
|
|
@@ -21662,7 +21960,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21662
21960
|
...TEXT_CONVERT,
|
|
21663
21961
|
spec(
|
|
21664
21962
|
"CONCATENATE",
|
|
21665
|
-
|
|
21963
|
+
C37,
|
|
21666
21964
|
"CONCATENATE(text1, [text2], ...)",
|
|
21667
21965
|
"Joins text items.",
|
|
21668
21966
|
1,
|
|
@@ -21671,7 +21969,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21671
21969
|
),
|
|
21672
21970
|
spec(
|
|
21673
21971
|
"CONCAT",
|
|
21674
|
-
|
|
21972
|
+
C37,
|
|
21675
21973
|
"CONCAT(text1, [text2], ...)",
|
|
21676
21974
|
"Joins text from items and ranges.",
|
|
21677
21975
|
1,
|
|
@@ -21681,7 +21979,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21681
21979
|
),
|
|
21682
21980
|
spec(
|
|
21683
21981
|
"TEXTJOIN",
|
|
21684
|
-
|
|
21982
|
+
C37,
|
|
21685
21983
|
"TEXTJOIN(delimiter, ignore_empty, text1, ...)",
|
|
21686
21984
|
"Joins text with a delimiter.",
|
|
21687
21985
|
3,
|
|
@@ -21700,14 +21998,14 @@ var TEXT_FUNCTIONS = [
|
|
|
21700
21998
|
["any"]
|
|
21701
21999
|
),
|
|
21702
22000
|
...["LEFT", "LEFTB"].map(
|
|
21703
|
-
(name) => spec(name,
|
|
22001
|
+
(name) => spec(name, C37, `${name}(text, [num_chars])`, "The first characters of a text.", 1, 2, (args) => {
|
|
21704
22002
|
const n = optNum(args, 1, 1);
|
|
21705
22003
|
if (n < 0) fail(ERR.VALUE);
|
|
21706
22004
|
return left(str(args[0]), Math.trunc(n));
|
|
21707
22005
|
})
|
|
21708
22006
|
),
|
|
21709
22007
|
...["RIGHT", "RIGHTB"].map(
|
|
21710
|
-
(name) => spec(name,
|
|
22008
|
+
(name) => spec(name, C37, `${name}(text, [num_chars])`, "The last characters of a text.", 1, 2, (args) => {
|
|
21711
22009
|
const n = Math.trunc(optNum(args, 1, 1));
|
|
21712
22010
|
if (n < 0) fail(ERR.VALUE);
|
|
21713
22011
|
return right(str(args[0]), n);
|
|
@@ -21716,7 +22014,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21716
22014
|
...["MID", "MIDB"].map(
|
|
21717
22015
|
(name) => spec(
|
|
21718
22016
|
name,
|
|
21719
|
-
|
|
22017
|
+
C37,
|
|
21720
22018
|
`${name}(text, start_num, num_chars)`,
|
|
21721
22019
|
"Characters from the middle of a text.",
|
|
21722
22020
|
3,
|
|
@@ -21732,7 +22030,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21732
22030
|
...["LEN", "LENB"].map(
|
|
21733
22031
|
(name) => spec(
|
|
21734
22032
|
name,
|
|
21735
|
-
|
|
22033
|
+
C37,
|
|
21736
22034
|
`${name}(text)`,
|
|
21737
22035
|
"The number of characters in a text.",
|
|
21738
22036
|
1,
|
|
@@ -21742,7 +22040,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21742
22040
|
),
|
|
21743
22041
|
spec(
|
|
21744
22042
|
"LOWER",
|
|
21745
|
-
|
|
22043
|
+
C37,
|
|
21746
22044
|
"LOWER(text)",
|
|
21747
22045
|
"Converts text to lower case.",
|
|
21748
22046
|
1,
|
|
@@ -21751,7 +22049,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21751
22049
|
),
|
|
21752
22050
|
spec(
|
|
21753
22051
|
"UPPER",
|
|
21754
|
-
|
|
22052
|
+
C37,
|
|
21755
22053
|
"UPPER(text)",
|
|
21756
22054
|
"Converts text to upper case.",
|
|
21757
22055
|
1,
|
|
@@ -21760,7 +22058,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21760
22058
|
),
|
|
21761
22059
|
spec(
|
|
21762
22060
|
"PROPER",
|
|
21763
|
-
|
|
22061
|
+
C37,
|
|
21764
22062
|
"PROPER(text)",
|
|
21765
22063
|
"Capitalizes the first letter of each word.",
|
|
21766
22064
|
1,
|
|
@@ -21769,7 +22067,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21769
22067
|
),
|
|
21770
22068
|
spec(
|
|
21771
22069
|
"TRIM",
|
|
21772
|
-
|
|
22070
|
+
C37,
|
|
21773
22071
|
"TRIM(text)",
|
|
21774
22072
|
"Removes extra spaces.",
|
|
21775
22073
|
1,
|
|
@@ -21778,7 +22076,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21778
22076
|
),
|
|
21779
22077
|
spec(
|
|
21780
22078
|
"CLEAN",
|
|
21781
|
-
|
|
22079
|
+
C37,
|
|
21782
22080
|
"CLEAN(text)",
|
|
21783
22081
|
"Removes non-printable characters.",
|
|
21784
22082
|
1,
|
|
@@ -21790,7 +22088,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21790
22088
|
),
|
|
21791
22089
|
spec(
|
|
21792
22090
|
"SUBSTITUTE",
|
|
21793
|
-
|
|
22091
|
+
C37,
|
|
21794
22092
|
"SUBSTITUTE(text, old_text, new_text, [instance_num])",
|
|
21795
22093
|
"Replaces occurrences of a text.",
|
|
21796
22094
|
3,
|
|
@@ -21814,7 +22112,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21814
22112
|
...["REPLACE", "REPLACEB"].map(
|
|
21815
22113
|
(name) => spec(
|
|
21816
22114
|
name,
|
|
21817
|
-
|
|
22115
|
+
C37,
|
|
21818
22116
|
`${name}(old_text, start_num, num_chars, new_text)`,
|
|
21819
22117
|
"Replaces part of a text.",
|
|
21820
22118
|
4,
|
|
@@ -21831,7 +22129,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21831
22129
|
...["FIND", "FINDB"].map(
|
|
21832
22130
|
(name) => spec(
|
|
21833
22131
|
name,
|
|
21834
|
-
|
|
22132
|
+
C37,
|
|
21835
22133
|
`${name}(find_text, within_text, [start_num])`,
|
|
21836
22134
|
"The position of a text (case-sensitive).",
|
|
21837
22135
|
2,
|
|
@@ -21842,7 +22140,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21842
22140
|
...["SEARCH", "SEARCHB"].map(
|
|
21843
22141
|
(name) => spec(
|
|
21844
22142
|
name,
|
|
21845
|
-
|
|
22143
|
+
C37,
|
|
21846
22144
|
`${name}(find_text, within_text, [start_num])`,
|
|
21847
22145
|
"The position of a text (wildcards, any case).",
|
|
21848
22146
|
2,
|
|
@@ -21850,7 +22148,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21850
22148
|
(args) => find(args, true)
|
|
21851
22149
|
)
|
|
21852
22150
|
),
|
|
21853
|
-
spec("REPT",
|
|
22151
|
+
spec("REPT", C37, "REPT(text, number_times)", "Repeats a text.", 2, 2, (args) => {
|
|
21854
22152
|
const n = Math.trunc(num2(args[1]));
|
|
21855
22153
|
const text = str(args[0]);
|
|
21856
22154
|
if (n < 0 || text.length * n > MAX_TEXT) fail(ERR.VALUE);
|
|
@@ -21858,7 +22156,7 @@ var TEXT_FUNCTIONS = [
|
|
|
21858
22156
|
}),
|
|
21859
22157
|
spec(
|
|
21860
22158
|
"EXACT",
|
|
21861
|
-
|
|
22159
|
+
C37,
|
|
21862
22160
|
"EXACT(text1, text2)",
|
|
21863
22161
|
"Whether two texts are identical (case-sensitive).",
|
|
21864
22162
|
2,
|
|
@@ -21867,8 +22165,412 @@ var TEXT_FUNCTIONS = [
|
|
|
21867
22165
|
)
|
|
21868
22166
|
];
|
|
21869
22167
|
|
|
22168
|
+
// xlsx/formula/functions/bahttext.ts
|
|
22169
|
+
var DIGITS = ["\u0E28\u0E39\u0E19\u0E22\u0E4C", "\u0E2B\u0E19\u0E36\u0E48\u0E07", "\u0E2A\u0E2D\u0E07", "\u0E2A\u0E32\u0E21", "\u0E2A\u0E35\u0E48", "\u0E2B\u0E49\u0E32", "\u0E2B\u0E01", "\u0E40\u0E08\u0E47\u0E14", "\u0E41\u0E1B\u0E14", "\u0E40\u0E01\u0E49\u0E32"];
|
|
22170
|
+
var PLACES = ["", "\u0E2A\u0E34\u0E1A", "\u0E23\u0E49\u0E2D\u0E22", "\u0E1E\u0E31\u0E19", "\u0E2B\u0E21\u0E37\u0E48\u0E19", "\u0E41\u0E2A\u0E19"];
|
|
22171
|
+
var MILLION = "\u0E25\u0E49\u0E32\u0E19";
|
|
22172
|
+
function belowMillion(n) {
|
|
22173
|
+
const digits2 = String(n).split("").map(Number);
|
|
22174
|
+
const len = digits2.length;
|
|
22175
|
+
let out = "";
|
|
22176
|
+
digits2.forEach((d, i2) => {
|
|
22177
|
+
const place = len - 1 - i2;
|
|
22178
|
+
if (d === 0) return;
|
|
22179
|
+
if (place === 0) out += d === 1 && len > 1 ? "\u0E40\u0E2D\u0E47\u0E14" : DIGITS[d] ?? "";
|
|
22180
|
+
else if (place === 1)
|
|
22181
|
+
out += (d === 1 ? "" : d === 2 ? "\u0E22\u0E35\u0E48" : DIGITS[d] ?? "") + (PLACES[1]);
|
|
22182
|
+
else out += (DIGITS[d] ?? "") + (PLACES[place] ?? "");
|
|
22183
|
+
});
|
|
22184
|
+
return out;
|
|
22185
|
+
}
|
|
22186
|
+
function thaiInteger(n) {
|
|
22187
|
+
if (n === 0) return DIGITS[0];
|
|
22188
|
+
const high = Math.floor(n / 1e6);
|
|
22189
|
+
const low = n % 1e6;
|
|
22190
|
+
return (high > 0 ? thaiInteger(high) + MILLION : "") + (low > 0 ? belowMillion(low) : "");
|
|
22191
|
+
}
|
|
22192
|
+
var BAHTTEXT = spec(
|
|
22193
|
+
"BAHTTEXT",
|
|
22194
|
+
"Text",
|
|
22195
|
+
"BAHTTEXT(number)",
|
|
22196
|
+
"A number as Thai text with the baht suffix.",
|
|
22197
|
+
1,
|
|
22198
|
+
1,
|
|
22199
|
+
(args) => {
|
|
22200
|
+
const value2 = num2(args[0]);
|
|
22201
|
+
const negative = value2 < 0;
|
|
22202
|
+
const satangTotal = Math.round(Math.abs(value2) * 100);
|
|
22203
|
+
if (!Number.isSafeInteger(satangTotal)) fail(ERR.VALUE);
|
|
22204
|
+
const baht = Math.floor(satangTotal / 100);
|
|
22205
|
+
const satang = satangTotal % 100;
|
|
22206
|
+
let text = "";
|
|
22207
|
+
if (baht > 0 || satang === 0) text += thaiInteger(baht) + "\u0E1A\u0E32\u0E17";
|
|
22208
|
+
text += satang === 0 ? "\u0E16\u0E49\u0E27\u0E19" : thaiInteger(satang) + "\u0E2A\u0E15\u0E32\u0E07\u0E04\u0E4C";
|
|
22209
|
+
return (negative && satangTotal > 0 ? "\u0E25\u0E1A" : "") + text;
|
|
22210
|
+
}
|
|
22211
|
+
);
|
|
22212
|
+
|
|
22213
|
+
// xlsx/formula/functions/getpivotdata.ts
|
|
22214
|
+
var same2 = (cached, wanted) => {
|
|
22215
|
+
if (typeof wanted === "number" && typeof cached === "number") return cached === wanted;
|
|
22216
|
+
if (cached === null) return wanted === null || wanted === "";
|
|
22217
|
+
if (typeof cached === "object") return false;
|
|
22218
|
+
return String(pivotItemLabel(cached)).toLowerCase() === String(wanted ?? "").toLowerCase();
|
|
22219
|
+
};
|
|
22220
|
+
var GETPIVOTDATA = spec(
|
|
22221
|
+
"GETPIVOTDATA",
|
|
22222
|
+
"Lookup & Reference",
|
|
22223
|
+
"GETPIVOTDATA(data_field, pivot_table, [field1, item1], ...)",
|
|
22224
|
+
"Data stored in a PivotTable report.",
|
|
22225
|
+
2,
|
|
22226
|
+
254,
|
|
22227
|
+
(args, ctx) => {
|
|
22228
|
+
const ref = args[1];
|
|
22229
|
+
const area = ref instanceof RefValue ? ref.first : void 0;
|
|
22230
|
+
if (!area) fail(ERR.REF);
|
|
22231
|
+
const sheet = ctx.workbook.sheets[area.sheet];
|
|
22232
|
+
const found = sheet ? pivotTableAt(sheet, area.range.start) : void 0;
|
|
22233
|
+
if (!found || (args.length - 2) % 2 !== 0) fail(ERR.REF);
|
|
22234
|
+
let pivot;
|
|
22235
|
+
try {
|
|
22236
|
+
pivot = pivotPageProjection(found);
|
|
22237
|
+
} catch {
|
|
22238
|
+
return fail(ERR.REF);
|
|
22239
|
+
}
|
|
22240
|
+
const wanted = str(args[0]).toLowerCase();
|
|
22241
|
+
const measure = pivotMeasures(pivot).find(
|
|
22242
|
+
(m) => m.caption.toLowerCase() === wanted || m.field.toLowerCase() === wanted
|
|
22243
|
+
);
|
|
22244
|
+
if (!measure) fail(ERR.REF);
|
|
22245
|
+
const axes2 = [pivot.rowField, pivot.secondRowField, pivot.columnField, pivot.pageFilter?.field];
|
|
22246
|
+
let records = pivot.records;
|
|
22247
|
+
for (let i2 = 2; i2 < args.length; i2 += 2) {
|
|
22248
|
+
const name = str(args[i2]);
|
|
22249
|
+
const index3 = pivot.fields.findIndex((f6) => f6.toLowerCase() === name.toLowerCase());
|
|
22250
|
+
const field = pivot.fields[index3];
|
|
22251
|
+
if (index3 < 0 || field === void 0 || !axes2.includes(field)) fail(ERR.REF);
|
|
22252
|
+
const item = scalar(args[i2 + 1]);
|
|
22253
|
+
if (isError(item)) return item;
|
|
22254
|
+
records = records.filter((record) => same2(record[index3] ?? null, item));
|
|
22255
|
+
}
|
|
22256
|
+
if (records.length === 0) fail(ERR.REF);
|
|
22257
|
+
const value2 = pivotMeasureNumber(pivot, records, measure);
|
|
22258
|
+
return value2;
|
|
22259
|
+
},
|
|
22260
|
+
["any"]
|
|
22261
|
+
);
|
|
22262
|
+
|
|
22263
|
+
// xlsx/formula/functions/groupby.ts
|
|
22264
|
+
var column = (values2) => new Matrix(values2.map((v) => [v]));
|
|
22265
|
+
function aggregateOf(arg, ctx) {
|
|
22266
|
+
if (!arg) return fail(ERR.VALUE);
|
|
22267
|
+
const node = arg.node;
|
|
22268
|
+
if (node.type === "name" && !ctx.frame.scope?.has(node.name.toUpperCase())) {
|
|
22269
|
+
const name = node.name.toUpperCase();
|
|
22270
|
+
if (name === "PERCENTOF") {
|
|
22271
|
+
return (group, all2) => {
|
|
22272
|
+
const sum3 = (v) => collectNumbers(ctx, [column(v)]).reduce((a2, b) => a2 + b, 0);
|
|
22273
|
+
const total2 = sum3(all2);
|
|
22274
|
+
return total2 === 0 ? ERR.DIV0 : sum3(group) / total2;
|
|
22275
|
+
};
|
|
22276
|
+
}
|
|
22277
|
+
const call = {
|
|
22278
|
+
type: "call",
|
|
22279
|
+
name,
|
|
22280
|
+
rawName: node.name,
|
|
22281
|
+
args: [{ type: "name", name: "_G" }]
|
|
22282
|
+
};
|
|
22283
|
+
return (group) => ctx.toScalar(
|
|
22284
|
+
ctx.evaluate(call, new Map([...ctx.frame.scope ?? [], ["_G", column(group)]]))
|
|
22285
|
+
);
|
|
22286
|
+
}
|
|
22287
|
+
const lambda = arg.get();
|
|
22288
|
+
if (isError(lambda)) return fail(lambda);
|
|
22289
|
+
if (!(lambda instanceof LambdaValue)) return fail(ERR.VALUE);
|
|
22290
|
+
return (group) => ctx.toScalar(ctx.callLambda(lambda, [column(group)]));
|
|
22291
|
+
}
|
|
22292
|
+
var optional = (args, i2) => {
|
|
22293
|
+
const arg = args[i2];
|
|
22294
|
+
return arg && arg.node.type !== "missing" ? arg.get() : void 0;
|
|
22295
|
+
};
|
|
22296
|
+
function optionalInt(args, i2, ctx) {
|
|
22297
|
+
const value2 = optional(args, i2);
|
|
22298
|
+
return value2 === void 0 || value2 === null ? void 0 : int3(ctx.toScalar(value2));
|
|
22299
|
+
}
|
|
22300
|
+
function sortSpec(args, i2, ctx, fallback) {
|
|
22301
|
+
const value2 = optional(args, i2);
|
|
22302
|
+
if (value2 === void 0 || value2 === null) return fallback;
|
|
22303
|
+
const list = ctx.toMatrix(value2).flat().map((v) => typeof v === "number" ? Math.trunc(v) : fail(ERR.VALUE));
|
|
22304
|
+
if (list.some((n) => n === 0)) fail(ERR.VALUE);
|
|
22305
|
+
return list;
|
|
22306
|
+
}
|
|
22307
|
+
function totalDepth(args, i2, ctx) {
|
|
22308
|
+
const depth = optionalInt(args, i2, ctx) ?? 1;
|
|
22309
|
+
if (depth !== 0 && depth !== 1 && depth !== -1) fail(ERR.VALUE);
|
|
22310
|
+
return depth;
|
|
22311
|
+
}
|
|
22312
|
+
function headerMode(args, i2, ctx, firstRow) {
|
|
22313
|
+
const mode = optionalInt(args, i2, ctx);
|
|
22314
|
+
if (mode === void 0)
|
|
22315
|
+
return firstRow.length > 0 && firstRow.every((v) => typeof v === "string");
|
|
22316
|
+
if (mode === 0) return false;
|
|
22317
|
+
if (mode === 1 || mode === 3) return true;
|
|
22318
|
+
return fail(ERR.VALUE);
|
|
22319
|
+
}
|
|
22320
|
+
var keyOf = (values2) => JSON.stringify(values2);
|
|
22321
|
+
var plain2 = (v) => v === void 0 || isError(v) ? null : v;
|
|
22322
|
+
function compareBy(keys, rows) {
|
|
22323
|
+
return (a2, b) => {
|
|
22324
|
+
for (const key of keys) {
|
|
22325
|
+
const i2 = Math.abs(key) - 1;
|
|
22326
|
+
const result2 = compareScalars(plain2(rows[a2]?.[i2]), plain2(rows[b]?.[i2]));
|
|
22327
|
+
if (result2 !== 0) return key < 0 ? -result2 : result2;
|
|
22328
|
+
}
|
|
22329
|
+
return a2 - b;
|
|
22330
|
+
};
|
|
22331
|
+
}
|
|
22332
|
+
function filtered(rows, args, i2, ctx) {
|
|
22333
|
+
const value2 = optional(args, i2);
|
|
22334
|
+
const all2 = Array.from({ length: rows }, (_, r) => r);
|
|
22335
|
+
if (value2 === void 0 || value2 === null) return all2;
|
|
22336
|
+
const flags = ctx.toMatrix(value2).flat();
|
|
22337
|
+
if (flags.length !== rows) fail(ERR.VALUE);
|
|
22338
|
+
return all2.filter((r) => flags[r] === true || typeof flags[r] === "number" && flags[r] !== 0);
|
|
22339
|
+
}
|
|
22340
|
+
function groupby(args, ctx) {
|
|
22341
|
+
const keysM = ctx.toMatrix(args[0].get());
|
|
22342
|
+
const valuesM = ctx.toMatrix(args[1].get());
|
|
22343
|
+
if (keysM.rows !== valuesM.rows) fail(ERR.VALUE);
|
|
22344
|
+
const aggregate3 = aggregateOf(args[2], ctx);
|
|
22345
|
+
const hasHeaders = headerMode(args, 3, ctx, valuesM.data[0] ?? []);
|
|
22346
|
+
const depth = totalDepth(args, 4, ctx);
|
|
22347
|
+
const kCols = keysM.cols;
|
|
22348
|
+
const vCols = valuesM.cols;
|
|
22349
|
+
const sort2 = sortSpec(
|
|
22350
|
+
args,
|
|
22351
|
+
5,
|
|
22352
|
+
ctx,
|
|
22353
|
+
Array.from({ length: kCols }, (_, i2) => i2 + 1)
|
|
22354
|
+
);
|
|
22355
|
+
const start = hasHeaders ? 1 : 0;
|
|
22356
|
+
const rows = filtered(keysM.rows, args, 6, ctx).filter((r) => r >= start);
|
|
22357
|
+
if (rows.length === 0) fail(ERR.CALC);
|
|
22358
|
+
const groups = /* @__PURE__ */ new Map();
|
|
22359
|
+
for (const r of rows) {
|
|
22360
|
+
const key = keyOf(keysM.data[r]);
|
|
22361
|
+
const found = groups.get(key);
|
|
22362
|
+
if (found) found.push(r);
|
|
22363
|
+
else groups.set(key, [r]);
|
|
22364
|
+
}
|
|
22365
|
+
const table2 = [...groups.values()].map((members) => {
|
|
22366
|
+
const key = keysM.data[members[0]];
|
|
22367
|
+
const cells = Array.from(
|
|
22368
|
+
{ length: vCols },
|
|
22369
|
+
(_, c2) => aggregate3(
|
|
22370
|
+
members.map((r) => valuesM.data[r][c2] ?? null),
|
|
22371
|
+
rows.map((r) => valuesM.data[r][c2] ?? null)
|
|
22372
|
+
)
|
|
22373
|
+
);
|
|
22374
|
+
return [...key, ...cells];
|
|
22375
|
+
});
|
|
22376
|
+
for (const key of sort2) if (Math.abs(key) > kCols + vCols) fail(ERR.VALUE);
|
|
22377
|
+
const order = table2.map((_, i2) => i2).sort(compareBy(sort2, table2));
|
|
22378
|
+
const out = order.map((i2) => table2[i2]);
|
|
22379
|
+
if (depth !== 0) {
|
|
22380
|
+
const total2 = [
|
|
22381
|
+
"Total",
|
|
22382
|
+
...Array(kCols - 1).fill(""),
|
|
22383
|
+
...Array.from(
|
|
22384
|
+
{ length: vCols },
|
|
22385
|
+
(_, c2) => aggregate3(
|
|
22386
|
+
rows.map((r) => valuesM.data[r][c2] ?? null),
|
|
22387
|
+
rows.map((r) => valuesM.data[r][c2] ?? null)
|
|
22388
|
+
)
|
|
22389
|
+
)
|
|
22390
|
+
];
|
|
22391
|
+
if (depth === 1) out.push(total2);
|
|
22392
|
+
else out.unshift(total2);
|
|
22393
|
+
}
|
|
22394
|
+
if (hasHeaders) out.unshift([...keysM.data[0], ...valuesM.data[0]]);
|
|
22395
|
+
return new Matrix(out);
|
|
22396
|
+
}
|
|
22397
|
+
function pivotby(args, ctx) {
|
|
22398
|
+
const rowsM = ctx.toMatrix(args[0].get());
|
|
22399
|
+
const colsM = ctx.toMatrix(args[1].get());
|
|
22400
|
+
const valuesM = ctx.toMatrix(args[2].get());
|
|
22401
|
+
if (rowsM.rows !== valuesM.rows || colsM.rows !== valuesM.rows || valuesM.cols !== 1)
|
|
22402
|
+
fail(ERR.VALUE);
|
|
22403
|
+
if (colsM.cols !== 1) fail(ERR.VALUE);
|
|
22404
|
+
const aggregate3 = aggregateOf(args[3], ctx);
|
|
22405
|
+
const hasHeaders = headerMode(args, 4, ctx, valuesM.data[0] ?? []);
|
|
22406
|
+
const rowDepth = totalDepth(args, 5, ctx);
|
|
22407
|
+
const kCols = rowsM.cols;
|
|
22408
|
+
const rowSort = sortSpec(
|
|
22409
|
+
args,
|
|
22410
|
+
6,
|
|
22411
|
+
ctx,
|
|
22412
|
+
Array.from({ length: kCols }, (_, i2) => i2 + 1)
|
|
22413
|
+
);
|
|
22414
|
+
const colDepth = totalDepth(args, 7, ctx);
|
|
22415
|
+
const colSort = sortSpec(args, 8, ctx, [1]);
|
|
22416
|
+
for (const key of rowSort) if (Math.abs(key) > kCols + 1) fail(ERR.VALUE);
|
|
22417
|
+
for (const key of colSort) if (Math.abs(key) > 2) fail(ERR.VALUE);
|
|
22418
|
+
const start = hasHeaders ? 1 : 0;
|
|
22419
|
+
const used = filtered(rowsM.rows, args, 9, ctx).filter((r) => r >= start);
|
|
22420
|
+
if (used.length === 0) fail(ERR.CALC);
|
|
22421
|
+
const val = (r) => valuesM.data[r][0] ?? null;
|
|
22422
|
+
const all2 = used.map(val);
|
|
22423
|
+
const rowKeys = /* @__PURE__ */ new Map();
|
|
22424
|
+
const colKeys = /* @__PURE__ */ new Map();
|
|
22425
|
+
for (const r of used) {
|
|
22426
|
+
for (const [map, key] of [
|
|
22427
|
+
[rowKeys, keyOf(rowsM.data[r])],
|
|
22428
|
+
[colKeys, keyOf(colsM.data[r])]
|
|
22429
|
+
]) {
|
|
22430
|
+
const found = map.get(key);
|
|
22431
|
+
if (found) found.push(r);
|
|
22432
|
+
else map.set(key, [r]);
|
|
22433
|
+
}
|
|
22434
|
+
}
|
|
22435
|
+
const agg = (members) => aggregate3(members.map(val), all2);
|
|
22436
|
+
const colGroups = [...colKeys.values()].map((members) => ({
|
|
22437
|
+
label: colsM.data[members[0]][0] ?? null,
|
|
22438
|
+
members,
|
|
22439
|
+
total: agg(members)
|
|
22440
|
+
}));
|
|
22441
|
+
const colOrder = colGroups.map((_, i2) => i2).sort(
|
|
22442
|
+
compareBy(
|
|
22443
|
+
colSort,
|
|
22444
|
+
colGroups.map((g2) => [g2.label, g2.total])
|
|
22445
|
+
)
|
|
22446
|
+
);
|
|
22447
|
+
const rowGroups = [...rowKeys.values()].map((members) => ({
|
|
22448
|
+
key: rowsM.data[members[0]],
|
|
22449
|
+
members,
|
|
22450
|
+
total: agg(members)
|
|
22451
|
+
}));
|
|
22452
|
+
const rowOrder = rowGroups.map((_, i2) => i2).sort(
|
|
22453
|
+
compareBy(
|
|
22454
|
+
rowSort,
|
|
22455
|
+
rowGroups.map((g2) => [...g2.key, g2.total])
|
|
22456
|
+
)
|
|
22457
|
+
);
|
|
22458
|
+
const columns = colOrder.map((i2) => colGroups[i2]);
|
|
22459
|
+
const lines = rowOrder.map((i2) => {
|
|
22460
|
+
const group = rowGroups[i2];
|
|
22461
|
+
const cells = columns.map((col) => {
|
|
22462
|
+
const members = group.members.filter((r) => col.members.includes(r));
|
|
22463
|
+
return members.length ? agg(members) : "";
|
|
22464
|
+
});
|
|
22465
|
+
return [
|
|
22466
|
+
...group.key,
|
|
22467
|
+
...colDepth === 1 ? [...cells, group.total] : colDepth === -1 ? [group.total, ...cells] : cells
|
|
22468
|
+
];
|
|
22469
|
+
});
|
|
22470
|
+
const grandRow = [
|
|
22471
|
+
"Total",
|
|
22472
|
+
...Array(kCols - 1).fill(""),
|
|
22473
|
+
...columns.map((col) => col.total),
|
|
22474
|
+
...colDepth === 0 ? [] : [agg(used)]
|
|
22475
|
+
];
|
|
22476
|
+
if (colDepth === -1)
|
|
22477
|
+
grandRow.splice(kCols, columns.length + 1, agg(used), ...columns.map((c2) => c2.total));
|
|
22478
|
+
if (rowDepth === 1) lines.push(grandRow);
|
|
22479
|
+
else if (rowDepth === -1) lines.unshift(grandRow);
|
|
22480
|
+
const header = [
|
|
22481
|
+
...hasHeaders ? [rowsM.data[0].join(" "), ...Array(kCols - 1).fill("")] : Array(kCols).fill(""),
|
|
22482
|
+
...colDepth === -1 ? ["Total"] : [],
|
|
22483
|
+
...columns.map((col) => col.label),
|
|
22484
|
+
...colDepth === 1 ? ["Total"] : []
|
|
22485
|
+
];
|
|
22486
|
+
return new Matrix([header, ...lines]);
|
|
22487
|
+
}
|
|
22488
|
+
var lazy = (name, syntax, description, minArgs, maxArgs, fn) => ({
|
|
22489
|
+
name,
|
|
22490
|
+
category: "Lookup & Reference",
|
|
22491
|
+
syntax,
|
|
22492
|
+
description,
|
|
22493
|
+
minArgs,
|
|
22494
|
+
maxArgs,
|
|
22495
|
+
lazy: fn
|
|
22496
|
+
});
|
|
22497
|
+
var GROUPBY_FUNCTIONS = [
|
|
22498
|
+
lazy(
|
|
22499
|
+
"GROUPBY",
|
|
22500
|
+
"GROUPBY(row_fields, values, function, [field_headers], [total_depth], [sort_order], [filter_array], [field_relationship])",
|
|
22501
|
+
"Groups rows by the row fields and aggregates the values.",
|
|
22502
|
+
3,
|
|
22503
|
+
8,
|
|
22504
|
+
groupby
|
|
22505
|
+
),
|
|
22506
|
+
lazy(
|
|
22507
|
+
"PIVOTBY",
|
|
22508
|
+
"PIVOTBY(row_fields, col_fields, values, function, [field_headers], [row_total_depth], [row_sort_order], [col_total_depth], [col_sort_order], [filter_array], [relative_to])",
|
|
22509
|
+
"Groups rows and columns by fields and aggregates the values into a table.",
|
|
22510
|
+
4,
|
|
22511
|
+
11,
|
|
22512
|
+
pivotby
|
|
22513
|
+
)
|
|
22514
|
+
];
|
|
22515
|
+
|
|
22516
|
+
// xlsx/formula/functions/modern.ts
|
|
22517
|
+
var sum2 = (values2) => values2.reduce((a2, b) => a2 + b, 0);
|
|
22518
|
+
function trimmed(blank, mode) {
|
|
22519
|
+
let start = 0;
|
|
22520
|
+
let end = blank.length;
|
|
22521
|
+
if (mode === 1 || mode === 3) while (start < end && blank[start]) start++;
|
|
22522
|
+
if (mode === 2 || mode === 3) while (end > start && blank[end - 1]) end--;
|
|
22523
|
+
return [start, end];
|
|
22524
|
+
}
|
|
22525
|
+
var MODERN_FUNCTIONS = [
|
|
22526
|
+
spec(
|
|
22527
|
+
"PERCENTOF",
|
|
22528
|
+
"Math & Trig",
|
|
22529
|
+
"PERCENTOF(data_subset, data_all)",
|
|
22530
|
+
"The share a subset of values is of all values.",
|
|
22531
|
+
2,
|
|
22532
|
+
2,
|
|
22533
|
+
(args, ctx) => {
|
|
22534
|
+
const total2 = sum2(collectNumbers(ctx, [args[1] ?? null]));
|
|
22535
|
+
if (total2 === 0) fail(ERR.DIV0);
|
|
22536
|
+
return sum2(collectNumbers(ctx, [args[0] ?? null])) / total2;
|
|
22537
|
+
},
|
|
22538
|
+
["any"]
|
|
22539
|
+
),
|
|
22540
|
+
spec(
|
|
22541
|
+
"TRIMRANGE",
|
|
22542
|
+
"Lookup & Reference",
|
|
22543
|
+
"TRIMRANGE(range, [trim_rows], [trim_cols])",
|
|
22544
|
+
"Removes blank rows and columns from the edges of a range.",
|
|
22545
|
+
1,
|
|
22546
|
+
3,
|
|
22547
|
+
(args, ctx) => {
|
|
22548
|
+
const mode = (i2) => {
|
|
22549
|
+
const v = args[i2];
|
|
22550
|
+
if (v === void 0 || v === null) return 3;
|
|
22551
|
+
const n = Math.trunc(ctx.toScalar(v));
|
|
22552
|
+
if (typeof ctx.toScalar(v) !== "number" || n < 0 || n > 3) fail(ERR.VALUE);
|
|
22553
|
+
return n;
|
|
22554
|
+
};
|
|
22555
|
+
const data = ctx.toMatrix(args[0] ?? null).data;
|
|
22556
|
+
const cols = data[0]?.length ?? 0;
|
|
22557
|
+
const [r0, r1] = trimmed(
|
|
22558
|
+
data.map((row2) => row2.every((v) => v === null)),
|
|
22559
|
+
mode(1)
|
|
22560
|
+
);
|
|
22561
|
+
const [c0, c1] = trimmed(
|
|
22562
|
+
Array.from({ length: cols }, (_, c2) => data.every((row2) => row2[c2] === null)),
|
|
22563
|
+
mode(2)
|
|
22564
|
+
);
|
|
22565
|
+
if (r1 <= r0 || c1 <= c0) fail(ERR.CALC);
|
|
22566
|
+
return new Matrix(data.slice(r0, r1).map((row2) => row2.slice(c0, c1)));
|
|
22567
|
+
},
|
|
22568
|
+
["any"]
|
|
22569
|
+
)
|
|
22570
|
+
];
|
|
22571
|
+
|
|
21870
22572
|
// xlsx/formula/functions/text-regex.ts
|
|
21871
|
-
var
|
|
22573
|
+
var C38 = "Text";
|
|
21872
22574
|
function compile(pattern, caseMode2, global) {
|
|
21873
22575
|
if (caseMode2 !== 0 && caseMode2 !== 1) fail(ERR.VALUE);
|
|
21874
22576
|
try {
|
|
@@ -21887,7 +22589,7 @@ function encodeUrl(text) {
|
|
|
21887
22589
|
var TEXT_REGEX_FUNCTIONS = [
|
|
21888
22590
|
spec(
|
|
21889
22591
|
"ENCODEURL",
|
|
21890
|
-
|
|
22592
|
+
C38,
|
|
21891
22593
|
"ENCODEURL(text)",
|
|
21892
22594
|
"Percent-encodes text for use in a URL.",
|
|
21893
22595
|
1,
|
|
@@ -21896,7 +22598,7 @@ var TEXT_REGEX_FUNCTIONS = [
|
|
|
21896
22598
|
),
|
|
21897
22599
|
spec(
|
|
21898
22600
|
"REGEXTEST",
|
|
21899
|
-
|
|
22601
|
+
C38,
|
|
21900
22602
|
"REGEXTEST(text, pattern, [case_sensitivity])",
|
|
21901
22603
|
"Whether any part of the text matches the pattern.",
|
|
21902
22604
|
2,
|
|
@@ -21905,7 +22607,7 @@ var TEXT_REGEX_FUNCTIONS = [
|
|
|
21905
22607
|
),
|
|
21906
22608
|
spec(
|
|
21907
22609
|
"REGEXEXTRACT",
|
|
21908
|
-
|
|
22610
|
+
C38,
|
|
21909
22611
|
"REGEXEXTRACT(text, pattern, [return_mode], [case_sensitivity])",
|
|
21910
22612
|
"Extracts the first match (0), all matches (1), or the first match\u2019s capture groups (2).",
|
|
21911
22613
|
2,
|
|
@@ -21932,7 +22634,7 @@ var TEXT_REGEX_FUNCTIONS = [
|
|
|
21932
22634
|
),
|
|
21933
22635
|
spec(
|
|
21934
22636
|
"REGEXREPLACE",
|
|
21935
|
-
|
|
22637
|
+
C38,
|
|
21936
22638
|
"REGEXREPLACE(text, pattern, replacement, [occurrence], [case_sensitivity])",
|
|
21937
22639
|
"Replaces the parts of the text that match the pattern.",
|
|
21938
22640
|
3,
|
|
@@ -21952,7 +22654,7 @@ var TEXT_REGEX_FUNCTIONS = [
|
|
|
21952
22654
|
];
|
|
21953
22655
|
|
|
21954
22656
|
// xlsx/formula/functions/text-extra.ts
|
|
21955
|
-
var
|
|
22657
|
+
var C39 = "Text";
|
|
21956
22658
|
function delimitersOf(ctx, value2) {
|
|
21957
22659
|
if (value2 === void 0 || value2 === null) return [];
|
|
21958
22660
|
return ctx.toMatrix(value2).flat().map((v) => {
|
|
@@ -22021,7 +22723,7 @@ var TEXT_EXTRA_FUNCTIONS = [
|
|
|
22021
22723
|
...TEXT_REGEX_FUNCTIONS,
|
|
22022
22724
|
spec(
|
|
22023
22725
|
"TEXTBEFORE",
|
|
22024
|
-
|
|
22726
|
+
C39,
|
|
22025
22727
|
"TEXTBEFORE(text, delimiter, [instance_num], [match_mode], [match_end], [if_not_found])",
|
|
22026
22728
|
"The text before a delimiter.",
|
|
22027
22729
|
2,
|
|
@@ -22031,7 +22733,7 @@ var TEXT_EXTRA_FUNCTIONS = [
|
|
|
22031
22733
|
),
|
|
22032
22734
|
spec(
|
|
22033
22735
|
"TEXTAFTER",
|
|
22034
|
-
|
|
22736
|
+
C39,
|
|
22035
22737
|
"TEXTAFTER(text, delimiter, [instance_num], [match_mode], [match_end], [if_not_found])",
|
|
22036
22738
|
"The text after a delimiter.",
|
|
22037
22739
|
2,
|
|
@@ -22041,7 +22743,7 @@ var TEXT_EXTRA_FUNCTIONS = [
|
|
|
22041
22743
|
),
|
|
22042
22744
|
spec(
|
|
22043
22745
|
"TEXTSPLIT",
|
|
22044
|
-
|
|
22746
|
+
C39,
|
|
22045
22747
|
"TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])",
|
|
22046
22748
|
"Splits text into an array.",
|
|
22047
22749
|
2,
|
|
@@ -22064,7 +22766,7 @@ var TEXT_EXTRA_FUNCTIONS = [
|
|
|
22064
22766
|
),
|
|
22065
22767
|
spec(
|
|
22066
22768
|
"VALUETOTEXT",
|
|
22067
|
-
|
|
22769
|
+
C39,
|
|
22068
22770
|
"VALUETOTEXT(value, [format])",
|
|
22069
22771
|
"Text for any value.",
|
|
22070
22772
|
1,
|
|
@@ -22073,7 +22775,7 @@ var TEXT_EXTRA_FUNCTIONS = [
|
|
|
22073
22775
|
),
|
|
22074
22776
|
spec(
|
|
22075
22777
|
"ARRAYTOTEXT",
|
|
22076
|
-
|
|
22778
|
+
C39,
|
|
22077
22779
|
"ARRAYTOTEXT(array, [format])",
|
|
22078
22780
|
"Text for an array.",
|
|
22079
22781
|
1,
|
|
@@ -22098,6 +22800,10 @@ var ALL = [
|
|
|
22098
22800
|
...LOGICAL_FUNCTIONS,
|
|
22099
22801
|
...TEXT_FUNCTIONS,
|
|
22100
22802
|
...TEXT_EXTRA_FUNCTIONS,
|
|
22803
|
+
BAHTTEXT,
|
|
22804
|
+
GETPIVOTDATA,
|
|
22805
|
+
...GROUPBY_FUNCTIONS,
|
|
22806
|
+
...MODERN_FUNCTIONS,
|
|
22101
22807
|
...DATETIME_FUNCTIONS,
|
|
22102
22808
|
...LOOKUP_FUNCTIONS,
|
|
22103
22809
|
...ARRAY_FUNCTIONS,
|
|
@@ -22124,7 +22830,7 @@ var paramKind = (spec2, index3) => {
|
|
|
22124
22830
|
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
22125
22831
|
|
|
22126
22832
|
// xlsx/formula/move.ts
|
|
22127
|
-
var
|
|
22833
|
+
var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
|
|
22128
22834
|
function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
22129
22835
|
const tokens2 = safeTokens(formula);
|
|
22130
22836
|
if (!tokens2) return formula;
|
|
@@ -22132,7 +22838,7 @@ function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
|
22132
22838
|
let changed = false;
|
|
22133
22839
|
for (const token of tokens2) {
|
|
22134
22840
|
const prefix = token.prefix;
|
|
22135
|
-
const onSheet = prefix !== void 0 && prefix.book === void 0 && prefix.sheet2 === void 0 &&
|
|
22841
|
+
const onSheet = prefix !== void 0 && prefix.book === void 0 && prefix.sheet2 === void 0 && same3(prefix.sheet, sheetName);
|
|
22136
22842
|
const table2 = typeof token.value === "string" && tables.has(token.value.toLowerCase()) && (token.kind === "structured" || token.kind === "name" && !prefix);
|
|
22137
22843
|
if ((token.kind === "ref" || token.kind === "name") && onSheet || table2) {
|
|
22138
22844
|
token.text = "#REF!";
|
|
@@ -23334,8 +24040,8 @@ function pageXml(sheet) {
|
|
|
23334
24040
|
const result2 = { margins: "", setup: setupXml(sheet, page), headerFooter: "" };
|
|
23335
24041
|
const marginsSource = snapshotElement(sheet, "pageMargins");
|
|
23336
24042
|
if (page.margins) {
|
|
23337
|
-
const
|
|
23338
|
-
result2.margins =
|
|
24043
|
+
const same4 = marginsSource && sameModel(readPageSetup(marginsSource, void 0, void 0, false)?.margins, page.margins);
|
|
24044
|
+
result2.margins = same4 ? snapshotXml(sheet, "pageMargins") ?? "" : el("pageMargins", { ...page.margins });
|
|
23339
24045
|
}
|
|
23340
24046
|
result2.headerFooter = headerFooterXml(sheet, page);
|
|
23341
24047
|
return result2;
|
|
@@ -23626,11 +24332,11 @@ function patchAutoFilter(doc, root, table2, before, names) {
|
|
|
23626
24332
|
const list = xKid(root, "tableColumns");
|
|
23627
24333
|
const original = list ? xKids(list, "tableColumn") : [];
|
|
23628
24334
|
const current = new Map(sourceColumnsForPatch(root, table2, names).map((c2, index3) => [c2, index3]));
|
|
23629
|
-
for (const
|
|
23630
|
-
const old = original[Number(
|
|
24335
|
+
for (const column2 of xKids(filter2, "filterColumn")) {
|
|
24336
|
+
const old = original[Number(column2.getAttribute("colId") ?? "0")];
|
|
23631
24337
|
const index3 = old ? current.get(old) : void 0;
|
|
23632
|
-
if (index3 === void 0) filter2.removeChild(
|
|
23633
|
-
else
|
|
24338
|
+
if (index3 === void 0) filter2.removeChild(column2);
|
|
24339
|
+
else column2.setAttribute("colId", num(index3));
|
|
23634
24340
|
}
|
|
23635
24341
|
if (!existing) insertBefore(root, filter2, ["sortState", "tableColumns"]);
|
|
23636
24342
|
const sort2 = xKid(filter2, "sortState") ?? xKid(root, "sortState");
|
|
@@ -23672,38 +24378,38 @@ function patchColumns(doc, root, sheet, table2, names) {
|
|
|
23672
24378
|
else match2.removeAttribute("id");
|
|
23673
24379
|
return match2;
|
|
23674
24380
|
});
|
|
23675
|
-
for (const
|
|
24381
|
+
for (const column2 of sourceColumns) list.removeChild(column2);
|
|
23676
24382
|
let nextId = Math.max(0, ...ids) + 1;
|
|
23677
24383
|
const totalsRow = table2.range.end.row;
|
|
23678
24384
|
names.forEach((name, index3) => {
|
|
23679
|
-
const
|
|
23680
|
-
if (!
|
|
23681
|
-
|
|
24385
|
+
const column2 = picked[index3] ?? doc.createElementNS(NS.x, "tableColumn");
|
|
24386
|
+
if (!column2.getAttribute("id")) column2.setAttribute("id", num(nextId++));
|
|
24387
|
+
column2.setAttribute("name", name);
|
|
23682
24388
|
const model = table2.columns[index3];
|
|
23683
24389
|
const fn = table2.totalsRow ? model?.totalsRowFunction : void 0;
|
|
23684
|
-
setOrRemove(
|
|
23685
|
-
setOrRemove(
|
|
24390
|
+
setOrRemove(column2, "totalsRowFunction", fn);
|
|
24391
|
+
setOrRemove(column2, "totalsRowLabel", table2.totalsRow ? model?.totalsRowLabel : void 0);
|
|
23686
24392
|
const calculated = model?.calculatedColumnFormula;
|
|
23687
24393
|
setChildText(
|
|
23688
24394
|
doc,
|
|
23689
|
-
|
|
24395
|
+
column2,
|
|
23690
24396
|
"calculatedColumnFormula",
|
|
23691
24397
|
calculated ? addFuturePrefixes(calculated) : void 0,
|
|
23692
24398
|
COLUMN_CHILD_ORDER.slice(1)
|
|
23693
24399
|
);
|
|
23694
|
-
if (fn !== "custom") setChildText(doc,
|
|
24400
|
+
if (fn !== "custom") setChildText(doc, column2, "totalsRowFormula", void 0, []);
|
|
23695
24401
|
else {
|
|
23696
24402
|
const cellFormula = sheet.rows.get(totalsRow)?.get(table2.range.start.col + index3)?.formula;
|
|
23697
24403
|
if (cellFormula)
|
|
23698
24404
|
setChildText(
|
|
23699
24405
|
doc,
|
|
23700
|
-
|
|
24406
|
+
column2,
|
|
23701
24407
|
"totalsRowFormula",
|
|
23702
24408
|
addFuturePrefixes(cellFormula),
|
|
23703
24409
|
COLUMN_CHILD_ORDER.slice(2)
|
|
23704
24410
|
);
|
|
23705
24411
|
}
|
|
23706
|
-
list.appendChild(
|
|
24412
|
+
list.appendChild(column2);
|
|
23707
24413
|
});
|
|
23708
24414
|
list.setAttribute("count", num(names.length));
|
|
23709
24415
|
}
|
|
@@ -23775,13 +24481,13 @@ function tableXml(table2, id, names) {
|
|
|
23775
24481
|
const filterEnd = { ...table2.range.end, row: table2.range.end.row - (table2.totalsRow ? 1 : 0) };
|
|
23776
24482
|
const filter2 = table2.headerRow && !table2.totalsRow ? `<autoFilter ref="${range}"/>` : table2.headerRow ? `<autoFilter ref="${formatRange({ start: table2.range.start, end: filterEnd })}"/>` : "";
|
|
23777
24483
|
const columns = names.map((name, index3) => {
|
|
23778
|
-
const
|
|
23779
|
-
const calculated =
|
|
24484
|
+
const column2 = table2.columns[index3];
|
|
24485
|
+
const calculated = column2?.calculatedColumnFormula ? `<calculatedColumnFormula>${escapeText2(addFuturePrefixes(column2.calculatedColumnFormula))}</calculatedColumnFormula>` : "";
|
|
23780
24486
|
const values2 = attrs({
|
|
23781
24487
|
id: index3 + 1,
|
|
23782
24488
|
name,
|
|
23783
|
-
totalsRowFunction: table2.totalsRow ?
|
|
23784
|
-
totalsRowLabel: table2.totalsRow ?
|
|
24489
|
+
totalsRowFunction: table2.totalsRow ? column2?.totalsRowFunction : void 0,
|
|
24490
|
+
totalsRowLabel: table2.totalsRow ? column2?.totalsRowLabel : void 0
|
|
23785
24491
|
});
|
|
23786
24492
|
return calculated ? `<tableColumn${values2}>${calculated}</tableColumn>` : `<tableColumn${values2}/>`;
|
|
23787
24493
|
}).join("");
|
|
@@ -24070,8 +24776,8 @@ function colsXml(sheet, styleCount) {
|
|
|
24070
24776
|
const sorted2 = [...sheet.columns].sort((a2, b) => a2.min - b.min);
|
|
24071
24777
|
let previous = -1;
|
|
24072
24778
|
const out = [];
|
|
24073
|
-
for (const
|
|
24074
|
-
const col = { ...
|
|
24779
|
+
for (const column2 of sorted2) {
|
|
24780
|
+
const col = { ...column2, min: Math.max(column2.min, previous + 1) };
|
|
24075
24781
|
if (col.max < col.min) continue;
|
|
24076
24782
|
previous = col.max;
|
|
24077
24783
|
const style2 = col.styleId && col.styleId < styleCount ? col.styleId : void 0;
|
|
@@ -24113,27 +24819,27 @@ function protectionXml2(sheet) {
|
|
|
24113
24819
|
function sourceCriteria(xml) {
|
|
24114
24820
|
try {
|
|
24115
24821
|
const wrapped = `<autoFilter xmlns="${NS.x}" ref="A1">${xml}</autoFilter>`;
|
|
24116
|
-
const
|
|
24117
|
-
return
|
|
24822
|
+
const column2 = readAutoFilter(parseXml(wrapped).documentElement)?.columns?.[0];
|
|
24823
|
+
return column2 ? { values: column2.values, blank: column2.blank } : void 0;
|
|
24118
24824
|
} catch {
|
|
24119
24825
|
return void 0;
|
|
24120
24826
|
}
|
|
24121
24827
|
}
|
|
24122
|
-
function filterColumnXml(
|
|
24123
|
-
if (
|
|
24124
|
-
const head = /^<filterColumn\b[^>]*?>/.exec(
|
|
24828
|
+
function filterColumnXml(column2) {
|
|
24829
|
+
if (column2.sourceXml && sameModel(sourceCriteria(column2.sourceXml), { values: column2.values, blank: column2.blank })) {
|
|
24830
|
+
const head = /^<filterColumn\b[^>]*?>/.exec(column2.sourceXml)?.[0];
|
|
24125
24831
|
if (head) {
|
|
24126
|
-
const colId = ` colId="${
|
|
24832
|
+
const colId = ` colId="${column2.offset}"`;
|
|
24127
24833
|
const patched = /\scolId="[^"]*"/.test(head) ? head.replace(/\scolId="[^"]*"/, colId) : head.replace(/^<filterColumn\b/, `<filterColumn${colId}`);
|
|
24128
|
-
return patched +
|
|
24834
|
+
return patched + column2.sourceXml.slice(head.length);
|
|
24129
24835
|
}
|
|
24130
24836
|
}
|
|
24131
|
-
if (!
|
|
24132
|
-
const values2 = (
|
|
24837
|
+
if (!column2.values?.length && !column2.blank) return "";
|
|
24838
|
+
const values2 = (column2.values ?? []).map((value2) => el("filter", { val: value2 })).join("");
|
|
24133
24839
|
return el(
|
|
24134
24840
|
"filterColumn",
|
|
24135
|
-
{ colId:
|
|
24136
|
-
el("filters", { blank:
|
|
24841
|
+
{ colId: column2.offset },
|
|
24842
|
+
el("filters", { blank: column2.blank || void 0 }, values2) || "<filters/>"
|
|
24137
24843
|
);
|
|
24138
24844
|
}
|
|
24139
24845
|
function autoFilterXml(sheet) {
|
|
@@ -24143,7 +24849,7 @@ function autoFilterXml(sheet) {
|
|
|
24143
24849
|
if (source2 && sameModel(readAutoFilter(source2), filter2))
|
|
24144
24850
|
return snapshotXml(sheet, "autoFilter") ?? "";
|
|
24145
24851
|
const width = filter2.range.end.col - filter2.range.start.col + 1;
|
|
24146
|
-
const columns = (filter2.columns ?? []).filter((
|
|
24852
|
+
const columns = (filter2.columns ?? []).filter((column2) => column2.offset >= 0 && column2.offset < width).sort((a2, b) => a2.offset - b.offset).map(filterColumnXml).join("");
|
|
24147
24853
|
const sort2 = source2 && sameModel(readAutoFilter(source2)?.range, filter2.range) ? elements(source2).filter((node) => node.localName === "sortState" || node.localName === "extLst").map((node) => outerXml(node)).join("") : "";
|
|
24148
24854
|
return el("autoFilter", { ref: formatRange(filter2.range) }, columns + sort2);
|
|
24149
24855
|
}
|
|
@@ -24787,8 +25493,8 @@ function sheetNameFromFileName(fileName) {
|
|
|
24787
25493
|
let end = stem.length;
|
|
24788
25494
|
while (start < end && stem[start] === "'") start++;
|
|
24789
25495
|
while (end > start && stem[end - 1] === "'") end--;
|
|
24790
|
-
const
|
|
24791
|
-
return
|
|
25496
|
+
const trimmed2 = stem.slice(start, end).slice(0, 31).trim();
|
|
25497
|
+
return trimmed2 && trimmed2.toLowerCase() !== "history" ? trimmed2 : "Sheet1";
|
|
24792
25498
|
}
|
|
24793
25499
|
function csvToWorkbook(text, options = {}) {
|
|
24794
25500
|
const workbook = createWorkbook({ sheets: [options.sheetName ?? "Sheet1"] });
|
|
@@ -25309,8 +26015,8 @@ function columnName(col) {
|
|
|
25309
26015
|
return name;
|
|
25310
26016
|
}
|
|
25311
26017
|
function quoteSheetName2(name) {
|
|
25312
|
-
const
|
|
25313
|
-
return
|
|
26018
|
+
const plain3 = /^[A-Za-z_][A-Za-z0-9_.]*$/.test(name) && !/^[A-Za-z]{1,3}[0-9]+$/.test(name) && !/^[Rr][0-9]*([Cc][0-9]*)?$/.test(name) && !/^(TRUE|FALSE)$/i.test(name);
|
|
26019
|
+
return plain3 ? name : `'${name.replace(/'/g, "''")}'`;
|
|
25314
26020
|
}
|
|
25315
26021
|
function formatNumber2(value2) {
|
|
25316
26022
|
return String(value2).replace("e", "E");
|
|
@@ -25524,7 +26230,7 @@ var SegmentReader = class _SegmentReader {
|
|
|
25524
26230
|
function joinedData(record) {
|
|
25525
26231
|
if (record.continues.length === 0)
|
|
25526
26232
|
return record.data;
|
|
25527
|
-
const total2 = record.continues.reduce((
|
|
26233
|
+
const total2 = record.continues.reduce((sum3, part) => sum3 + part.length, record.data.length);
|
|
25528
26234
|
const out = new Uint8Array(total2);
|
|
25529
26235
|
out.set(record.data, 0);
|
|
25530
26236
|
let at = record.data.length;
|
|
@@ -26139,8 +26845,8 @@ function parseSupBook(data) {
|
|
|
26139
26845
|
function sheetRange(first2, last) {
|
|
26140
26846
|
if (first2 === last)
|
|
26141
26847
|
return quoteSheetName2(first2);
|
|
26142
|
-
const
|
|
26143
|
-
return
|
|
26848
|
+
const plain3 = quoteSheetName2(first2) === first2 && quoteSheetName2(last) === last;
|
|
26849
|
+
return plain3 ? `${first2}:${last}` : `'${`${first2}:${last}`.replace(/'/g, "''")}'`;
|
|
26144
26850
|
}
|
|
26145
26851
|
function parseGlobals(records) {
|
|
26146
26852
|
const first2 = records[0];
|
|
@@ -27188,18 +27894,18 @@ function mapSheet(source2, sheetId, style2) {
|
|
|
27188
27894
|
putCell(sheet, item.row, item.col, cell);
|
|
27189
27895
|
}
|
|
27190
27896
|
sheet.merges = source2.merges.map(toRange);
|
|
27191
|
-
sheet.columns = source2.columns.map((
|
|
27897
|
+
sheet.columns = source2.columns.map((column2) => {
|
|
27192
27898
|
const info = {
|
|
27193
|
-
min:
|
|
27194
|
-
max:
|
|
27195
|
-
width:
|
|
27899
|
+
min: column2.firstCol,
|
|
27900
|
+
max: column2.lastCol,
|
|
27901
|
+
width: column2.width
|
|
27196
27902
|
};
|
|
27197
|
-
if (
|
|
27198
|
-
if (
|
|
27199
|
-
if (
|
|
27200
|
-
if (
|
|
27201
|
-
if (
|
|
27202
|
-
const styleId = style2(
|
|
27903
|
+
if (column2.customWidth) info.customWidth = true;
|
|
27904
|
+
if (column2.hidden) info.hidden = true;
|
|
27905
|
+
if (column2.bestFit) info.bestFit = true;
|
|
27906
|
+
if (column2.outlineLevel) info.outlineLevel = column2.outlineLevel;
|
|
27907
|
+
if (column2.collapsed) info.collapsed = true;
|
|
27908
|
+
const styleId = style2(column2.xf);
|
|
27203
27909
|
if (styleId) info.styleId = styleId;
|
|
27204
27910
|
return info;
|
|
27205
27911
|
});
|
|
@@ -27504,11 +28210,11 @@ async function decryptWorkbook(bytes, password) {
|
|
|
27504
28210
|
"This workbook is password protected. Enter the password to open it."
|
|
27505
28211
|
);
|
|
27506
28212
|
}
|
|
27507
|
-
const
|
|
27508
|
-
if (!startsWith(
|
|
28213
|
+
const plain3 = await decryptOoxmlPackage(bytes, password);
|
|
28214
|
+
if (!startsWith(plain3, ZIP_MAGIC)) {
|
|
27509
28215
|
throw new Error("The decrypted file is not an Excel workbook package.");
|
|
27510
28216
|
}
|
|
27511
|
-
return
|
|
28217
|
+
return plain3;
|
|
27512
28218
|
}
|
|
27513
28219
|
async function loadWorkbook(input, options = {}) {
|
|
27514
28220
|
let bytes = toBytes3(input);
|