exceljs-formula-recalc 0.160.2 → 0.164.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/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +58 -5
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
process.exitCode =
|
|
2
|
+
import { runXlsxFormulaRecalcCliAsync } from 'xlsx-formula-recalc/cli-api';
|
|
3
|
+
process.exitCode = await runXlsxFormulaRecalcCliAsync(process.argv.slice(2), {
|
|
4
4
|
commandName: 'exceljs-recalc',
|
|
5
5
|
});
|
|
6
6
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAE1E,OAAO,CAAC,QAAQ,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC3E,WAAW,EAAE,gBAAgB;CAC9B,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type XlsxFormulaRecalcOptions, type XlsxFormulaRecalcResult } from 'xlsx-formula-recalc';
|
|
2
|
-
export {
|
|
2
|
+
export { recalculateXlsx, recalculateXlsxFileToFile } from 'xlsx-formula-recalc';
|
|
3
|
+
export { WorkPaper, exportXlsx, importXlsx, parseQualifiedCellTarget } from 'bilig-workpaper/xlsx';
|
|
3
4
|
export type { XlsxFormulaRecalcCellValue, XlsxFormulaRecalcEdit, XlsxFormulaRecalcOptions, XlsxFormulaRecalcResult, } from 'xlsx-formula-recalc';
|
|
4
5
|
export interface ExceljsWorkbookLike {
|
|
5
6
|
readonly xlsx: {
|
|
@@ -21,4 +22,9 @@ export interface ExceljsFormulaRecalcResult extends XlsxFormulaRecalcResult {
|
|
|
21
22
|
readonly workbookMutated: boolean;
|
|
22
23
|
}
|
|
23
24
|
export declare function recalculateExceljsWorkbook(workbook: ExceljsWorkbookLike, options?: ExceljsFormulaRecalcOptions): Promise<ExceljsFormulaRecalcResult>;
|
|
24
|
-
export declare function recalculateExceljsBuffer(input: Uint8Array | ArrayBuffer | Buffer, options?: XlsxFormulaRecalcOptions): XlsxFormulaRecalcResult
|
|
25
|
+
export declare function recalculateExceljsBuffer(input: Uint8Array | ArrayBuffer | Buffer, options?: XlsxFormulaRecalcOptions): Promise<XlsxFormulaRecalcResult>;
|
|
26
|
+
export declare function parseQualifiedA1(target: string): {
|
|
27
|
+
readonly sheetName: string;
|
|
28
|
+
readonly row: number;
|
|
29
|
+
readonly col: number;
|
|
30
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { recalculateXlsx } from 'xlsx-formula-recalc';
|
|
2
|
+
export { recalculateXlsx, recalculateXlsxFileToFile } from 'xlsx-formula-recalc';
|
|
3
|
+
export { WorkPaper, exportXlsx, importXlsx, parseQualifiedCellTarget } from 'bilig-workpaper/xlsx';
|
|
3
4
|
export async function recalculateExceljsWorkbook(workbook, options = {}) {
|
|
4
5
|
const { mutateWorkbook = true, ...recalcOptions } = options;
|
|
5
6
|
const input = await workbook.xlsx.writeBuffer();
|
|
6
|
-
const result = recalculateXlsx(toUint8Array(input), recalcOptions);
|
|
7
|
+
const result = await recalculateXlsx(toUint8Array(input), recalcOptions);
|
|
7
8
|
if (mutateWorkbook) {
|
|
8
9
|
await workbook.xlsx.load(result.xlsx);
|
|
9
10
|
patchExceljsReadResults(workbook, result.reads);
|
|
@@ -13,8 +14,8 @@ export async function recalculateExceljsWorkbook(workbook, options = {}) {
|
|
|
13
14
|
workbookMutated: mutateWorkbook,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
export function recalculateExceljsBuffer(input, options = {}) {
|
|
17
|
-
return recalculateXlsx(input, options);
|
|
17
|
+
export async function recalculateExceljsBuffer(input, options = {}) {
|
|
18
|
+
return await recalculateXlsx(input, options);
|
|
18
19
|
}
|
|
19
20
|
function toUint8Array(input) {
|
|
20
21
|
if (input instanceof Uint8Array) {
|
|
@@ -48,6 +49,58 @@ function patchExceljsReadResults(workbook, reads) {
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
}
|
|
52
|
+
export function parseQualifiedA1(target) {
|
|
53
|
+
const trimmed = target.trim();
|
|
54
|
+
const separator = findSheetSeparator(trimmed);
|
|
55
|
+
if (separator <= 0 || separator >= trimmed.length - 1) {
|
|
56
|
+
throw new Error(`Expected a sheet-qualified A1 target such as Inputs!B2, received: ${target}`);
|
|
57
|
+
}
|
|
58
|
+
const a1 = trimmed
|
|
59
|
+
.slice(separator + 1)
|
|
60
|
+
.replace(/\$/gu, '')
|
|
61
|
+
.toUpperCase();
|
|
62
|
+
const match = /^(?<col>[A-Z]+)(?<row>[1-9][0-9]*)$/u.exec(a1);
|
|
63
|
+
const row = match?.groups?.['row'];
|
|
64
|
+
const col = match?.groups?.['col'];
|
|
65
|
+
if (!row || !col) {
|
|
66
|
+
throw new Error(`Expected a single A1 cell reference in target ${target}`);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
sheetName: unquoteSheetName(trimmed.slice(0, separator)),
|
|
70
|
+
row: Number.parseInt(row, 10) - 1,
|
|
71
|
+
col: columnLettersToIndex(col),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function findSheetSeparator(target) {
|
|
75
|
+
let inQuote = false;
|
|
76
|
+
for (let index = 0; index < target.length; index += 1) {
|
|
77
|
+
const char = target[index];
|
|
78
|
+
if (char === "'") {
|
|
79
|
+
if (inQuote && target[index + 1] === "'") {
|
|
80
|
+
index += 1;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
inQuote = !inQuote;
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (char === '!' && !inQuote) {
|
|
88
|
+
return index;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return -1;
|
|
92
|
+
}
|
|
93
|
+
function unquoteSheetName(rawSheetName) {
|
|
94
|
+
const trimmed = rawSheetName.trim();
|
|
95
|
+
return trimmed.startsWith("'") && trimmed.endsWith("'") ? trimmed.slice(1, -1).replace(/''/gu, "'") : trimmed;
|
|
96
|
+
}
|
|
97
|
+
function columnLettersToIndex(letters) {
|
|
98
|
+
let index = 0;
|
|
99
|
+
for (const char of letters) {
|
|
100
|
+
index = index * 26 + (char.charCodeAt(0) - 64);
|
|
101
|
+
}
|
|
102
|
+
return index - 1;
|
|
103
|
+
}
|
|
51
104
|
function unwrapReadValue(value) {
|
|
52
105
|
if (typeof value === 'object' && value !== null && 'value' in value) {
|
|
53
106
|
return value.value;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA+D,MAAM,qBAAqB,CAAA;AAElH,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAgClG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAA6B,EAC7B,UAAuC,EAAE;IAEzC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAA;IAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAA;IAExE,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACrC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,cAAc;KAChC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAwC,EACxC,UAAoC,EAAE;IAEtC,OAAO,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,KAAwC;IAC5D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA6B,EAAE,KAAuC;IACrG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,OAAM;IACR,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACzD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;QACtF,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAQ;QACV,CAAC;QACD,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,IAAI,CAAC,KAAK;gBACb,MAAM,EAAE,SAAS;aAClB,CAAA;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC7C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,qEAAqE,MAAM,EAAE,CAAC,CAAA;IAChG,CAAC;IACD,MAAM,EAAE,GAAG,OAAO;SACf,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,WAAW,EAAE,CAAA;IAChB,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7D,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO;QACL,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACxD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QACjC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;KAC/B,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzC,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,OAAO,CAAA;YACpB,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IACnC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AAC/G,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAA+C;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC,KAAK,CAAA;IACpB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAA;AAC/G,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,CAAA;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QAClC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,CAAA;QACvD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "exceljs-formula-recalc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.164.0",
|
|
4
4
|
"description": "Recalculate ExcelJS XLSX workbook formulas in Node.js without Excel, LibreOffice, or browser automation.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"excel",
|
|
@@ -57,7 +57,8 @@
|
|
|
57
57
|
"build": "pnpm --dir ../.. --filter xlsx-formula-recalc build && rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"
|
|
60
|
+
"bilig-workpaper": "0.164.0",
|
|
61
|
+
"xlsx-formula-recalc": "0.164.0"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
64
|
"exceljs": "4.4.0"
|