@rowsncolumns/utils 9.2.44 → 9.4.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/cjs/formula-locale/formula-locale-data.generated.d.ts +44 -0
- package/dist/cjs/formula-locale/formula-locale-data.generated.d.ts.map +1 -0
- package/dist/cjs/formula-locale/formula-locale-data.generated.js +5567 -0
- package/dist/cjs/formula-locale.d.ts +159 -0
- package/dist/cjs/formula-locale.d.ts.map +1 -0
- package/dist/cjs/formula-locale.js +804 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/sparkline-groups.d.ts +102 -0
- package/dist/cjs/sparkline-groups.d.ts.map +1 -0
- package/dist/cjs/sparkline-groups.js +452 -0
- package/dist/cjs/string.d.ts +15 -0
- package/dist/cjs/string.d.ts.map +1 -1
- package/dist/cjs/string.js +46 -1
- package/dist/cjs/table-names.d.ts +55 -0
- package/dist/cjs/table-names.d.ts.map +1 -0
- package/dist/cjs/table-names.js +189 -0
- package/dist/cjs/table-styles.d.ts +9 -0
- package/dist/cjs/table-styles.d.ts.map +1 -1
- package/dist/cjs/table-styles.js +53 -1
- package/dist/cjs/table-totals.d.ts +31 -0
- package/dist/cjs/table-totals.d.ts.map +1 -0
- package/dist/cjs/table-totals.js +84 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/formula-locale/formula-locale-data.generated.d.ts +44 -0
- package/dist/esm/formula-locale/formula-locale-data.generated.d.ts.map +1 -0
- package/dist/esm/formula-locale/formula-locale-data.generated.js +5564 -0
- package/dist/esm/formula-locale.d.ts +159 -0
- package/dist/esm/formula-locale.d.ts.map +1 -0
- package/dist/esm/formula-locale.js +0 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/sparkline-groups.d.ts +102 -0
- package/dist/esm/sparkline-groups.d.ts.map +1 -0
- package/dist/esm/sparkline-groups.js +387 -0
- package/dist/esm/string.d.ts +15 -0
- package/dist/esm/string.d.ts.map +1 -1
- package/dist/esm/string.js +43 -0
- package/dist/esm/table-names.d.ts +55 -0
- package/dist/esm/table-names.d.ts.map +1 -0
- package/dist/esm/table-names.js +129 -0
- package/dist/esm/table-styles.d.ts +9 -0
- package/dist/esm/table-styles.d.ts.map +1 -1
- package/dist/esm/table-styles.js +34 -1
- package/dist/esm/table-totals.d.ts +31 -0
- package/dist/esm/table-totals.d.ts.map +1 -0
- package/dist/esm/table-totals.js +68 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +5 -3
package/dist/cjs/string.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeExternalUrl = exports.supplant = exports.selectionBoundsFromCells = exports.escapeCharacters = exports.desanitizeSheetName = exports.sanitizeSheetName = exports.cellRangeToAddress = exports.cellToAddress = exports.getRowIndexFromAddress = exports.getColumnNameFromAddress = exports.addressToCell = exports.convertCellToRange = void 0;
|
|
3
|
+
exports.normalizeExternalUrl = exports.supplant = exports.selectionBoundsFromCells = exports.matchesWildcardPattern = exports.wildcardPatternToRegExpSource = exports.escapeCharacters = exports.desanitizeSheetName = exports.sanitizeSheetName = exports.cellRangeToAddress = exports.cellToAddress = exports.getRowIndexFromAddress = exports.getColumnNameFromAddress = exports.addressToCell = exports.convertCellToRange = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var typeguards_1 = require("./typeguards");
|
|
6
6
|
var numbers_1 = require("./numbers");
|
|
@@ -186,6 +186,51 @@ var escapeCharacters = function (str) {
|
|
|
186
186
|
: str || "";
|
|
187
187
|
};
|
|
188
188
|
exports.escapeCharacters = escapeCharacters;
|
|
189
|
+
/**
|
|
190
|
+
* Regular-expression source for an Excel wildcard pattern: `*` matches any run
|
|
191
|
+
* of characters, `?` exactly one, and `~` escapes the next character (`~*` is a
|
|
192
|
+
* literal asterisk). Every other character is matched literally. Callers anchor
|
|
193
|
+
* the source (`^…$` for "equals", `^…` for "begins with", …) and compile it
|
|
194
|
+
* case-insensitively — Excel's text criteria never distinguish case.
|
|
195
|
+
*/
|
|
196
|
+
var wildcardPatternToRegExpSource = function (pattern) {
|
|
197
|
+
var source = "";
|
|
198
|
+
for (var i = 0; i < pattern.length; i++) {
|
|
199
|
+
var char = pattern[i];
|
|
200
|
+
if (char === "~" && i + 1 < pattern.length) {
|
|
201
|
+
source += (0, exports.escapeCharacters)(pattern[++i]);
|
|
202
|
+
}
|
|
203
|
+
else if (char === "*") {
|
|
204
|
+
source += ".*";
|
|
205
|
+
}
|
|
206
|
+
else if (char === "?") {
|
|
207
|
+
source += ".";
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
source += (0, exports.escapeCharacters)(char);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return source;
|
|
214
|
+
};
|
|
215
|
+
exports.wildcardPatternToRegExpSource = wildcardPatternToRegExpSource;
|
|
216
|
+
/**
|
|
217
|
+
* Does `text` satisfy an Excel wildcard `pattern` (see
|
|
218
|
+
* `wildcardPatternToRegExpSource`) under the given anchoring? `equals` is a
|
|
219
|
+
* whole-string match, `startsWith` / `endsWith` anchor one side, `contains`
|
|
220
|
+
* neither. Case-insensitive like Excel's AutoFilter and COUNTIF.
|
|
221
|
+
*/
|
|
222
|
+
var matchesWildcardPattern = function (pattern, text, anchor) {
|
|
223
|
+
var source = (0, exports.wildcardPatternToRegExpSource)(pattern);
|
|
224
|
+
var anchored = anchor === "equals"
|
|
225
|
+
? "^".concat(source, "$")
|
|
226
|
+
: anchor === "startsWith"
|
|
227
|
+
? "^".concat(source)
|
|
228
|
+
: anchor === "endsWith"
|
|
229
|
+
? "".concat(source, "$")
|
|
230
|
+
: source;
|
|
231
|
+
return new RegExp(anchored, "is").test(text);
|
|
232
|
+
};
|
|
233
|
+
exports.matchesWildcardPattern = matchesWildcardPattern;
|
|
189
234
|
/**
|
|
190
235
|
* Get selection from start and end cell
|
|
191
236
|
* @param start
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel's rules for a table name (Table Design → Table Name / "Rename an Excel table"):
|
|
3
|
+
*
|
|
4
|
+
* - starts with a letter, an underscore (`_`) or a backslash (`\`);
|
|
5
|
+
* - the rest is letters, digits, periods (`.`) and underscores — no spaces;
|
|
6
|
+
* - is not a cell reference (`A1`, `R1C1`, `XFD1048576`) and not the lone `C` / `R` shortcuts;
|
|
7
|
+
* - is at most 255 characters;
|
|
8
|
+
* - is unique across the workbook, compared case-insensitively — against the other tables AND the
|
|
9
|
+
* defined names (Excel refuses a table named like an existing defined name, and a defined name
|
|
10
|
+
* spelled like an existing table).
|
|
11
|
+
*
|
|
12
|
+
* Both engines create and rename tables through these checks (the rnc store mirrors them in Rust and
|
|
13
|
+
* surfaces the same messages through its `rejections` channel), and the table editor's validation
|
|
14
|
+
* schema shows the same text under the name field.
|
|
15
|
+
*/
|
|
16
|
+
export declare const TABLE_NAME_MAX_LENGTH = 255;
|
|
17
|
+
export declare const TABLE_NAME_REQUIRED_MESSAGE = "Enter a table name.";
|
|
18
|
+
export declare const TABLE_NAME_TOO_LONG_MESSAGE = "Table names can't be longer than 255 characters.";
|
|
19
|
+
export declare const TABLE_NAME_SPACES_MESSAGE = "Table names can't contain spaces.";
|
|
20
|
+
export declare const TABLE_NAME_LEADING_CHAR_MESSAGE = "Table names must start with a letter, an underscore (_) or a backslash (\\).";
|
|
21
|
+
export declare const TABLE_NAME_INVALID_CHAR_MESSAGE = "Table names can only contain letters, numbers, periods (.) and underscores (_).";
|
|
22
|
+
export declare const TABLE_NAME_CELL_REFERENCE_MESSAGE = "Table names can't be a cell reference such as A1 or R1C1.";
|
|
23
|
+
export declare const tableNameDuplicateMessage: (existing: string) => string;
|
|
24
|
+
export declare const tableNameDefinedNameMessage: (existing: string) => string;
|
|
25
|
+
/** `create-table` with an `id` an existing table already holds is refused on both engines (#668 T-56). */
|
|
26
|
+
export declare const tableIdDuplicateMessage: (id: string | number) => string;
|
|
27
|
+
export declare const definedNameTableNameMessage: (existing: string) => string;
|
|
28
|
+
/** True when `name` reads as a cell reference in either A1 or R1C1 notation. */
|
|
29
|
+
export declare const isCellReferenceLikeName: (name: string) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The reason `name` is not an acceptable table name, or `undefined` when it is. `existingNames` are
|
|
32
|
+
* the OTHER tables' names in the workbook (leave the table being renamed out of it) and
|
|
33
|
+
* `existingDefinedNames` the workbook's defined names; duplicates against either are detected
|
|
34
|
+
* case-insensitively, the way Excel compares names.
|
|
35
|
+
*/
|
|
36
|
+
export declare const validateTableName: (name: string, existingNames?: Iterable<string> | null, existingDefinedNames?: Iterable<string> | null) => string | undefined;
|
|
37
|
+
export declare const isValidTableName: (name: string, existingNames?: Iterable<string> | null, existingDefinedNames?: Iterable<string> | null) => boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The reason a defined name `name` cannot be created or renamed to — it is spelled like one of
|
|
40
|
+
* `tableNames` (case-insensitive) — or `undefined` when no table holds it. Excel keeps tables and
|
|
41
|
+
* defined names in one namespace.
|
|
42
|
+
*/
|
|
43
|
+
export declare const validateDefinedNameAgainstTables: (name: string, tableNames?: Iterable<string> | null) => string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* The default name for a new table: `Table1`, `Table2`, … — the LOWEST number no existing table
|
|
46
|
+
* uses (case-insensitive), so a deleted table's number is reissued and the result never collides.
|
|
47
|
+
* `format` localises the pattern (`(n) => \`Tabelle${n}\``).
|
|
48
|
+
*/
|
|
49
|
+
export declare const getNextTableName: (existingNames: Iterable<string>, format?: (index: number) => string) => string;
|
|
50
|
+
/**
|
|
51
|
+
* The name for a copy of table `base`: `Sales2`, `Sales3`, … — the LOWEST number no existing table
|
|
52
|
+
* uses (case-insensitive), the way Excel names the table on a duplicated sheet.
|
|
53
|
+
*/
|
|
54
|
+
export declare const getNextTableCopyName: (base: string, existingNames: Iterable<string>) => string;
|
|
55
|
+
//# sourceMappingURL=table-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-names.d.ts","sourceRoot":"","sources":["../../table-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAYzC,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AACjE,eAAO,MAAM,2BAA2B,qDAA0E,CAAC;AACnH,eAAO,MAAM,yBAAyB,sCAAsC,CAAC;AAC7E,eAAO,MAAM,+BAA+B,iFACoC,CAAC;AACjF,eAAO,MAAM,+BAA+B,oFACuC,CAAC;AACpF,eAAO,MAAM,iCAAiC,8DACe,CAAC;AAC9D,eAAO,MAAM,yBAAyB,GAAI,UAAU,MAAM,WACkC,CAAC;AAC7F,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,WACmD,CAAC;AAChH,0GAA0G;AAC1G,eAAO,MAAM,uBAAuB,GAAI,IAAI,MAAM,GAAG,MAAM,WACK,CAAC;AACjE,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,WACkD,CAAC;AAmB/G,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,OAGzB,CAAC;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,gBAAgB,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EACvC,uBAAuB,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,KAC7C,MAAM,GAAG,SA4BX,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,gBAAgB,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EACvC,uBAAuB,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,KAC7C,OACyE,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,GAC3C,MAAM,MAAM,EACZ,aAAa,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,KACnC,MAAM,GAAG,SAGX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,eAAe,QAAQ,CAAC,MAAM,CAAC,EAC/B,SAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,MAAmC,KAC7D,MAUF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,EACZ,eAAe,QAAQ,CAAC,MAAM,CAAC,KAC9B,MAUF,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNextTableCopyName = exports.getNextTableName = exports.validateDefinedNameAgainstTables = exports.isValidTableName = exports.validateTableName = exports.isCellReferenceLikeName = exports.definedNameTableNameMessage = exports.tableIdDuplicateMessage = exports.tableNameDefinedNameMessage = exports.tableNameDuplicateMessage = exports.TABLE_NAME_CELL_REFERENCE_MESSAGE = exports.TABLE_NAME_INVALID_CHAR_MESSAGE = exports.TABLE_NAME_LEADING_CHAR_MESSAGE = exports.TABLE_NAME_SPACES_MESSAGE = exports.TABLE_NAME_TOO_LONG_MESSAGE = exports.TABLE_NAME_REQUIRED_MESSAGE = exports.TABLE_NAME_MAX_LENGTH = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Excel's rules for a table name (Table Design → Table Name / "Rename an Excel table"):
|
|
7
|
+
*
|
|
8
|
+
* - starts with a letter, an underscore (`_`) or a backslash (`\`);
|
|
9
|
+
* - the rest is letters, digits, periods (`.`) and underscores — no spaces;
|
|
10
|
+
* - is not a cell reference (`A1`, `R1C1`, `XFD1048576`) and not the lone `C` / `R` shortcuts;
|
|
11
|
+
* - is at most 255 characters;
|
|
12
|
+
* - is unique across the workbook, compared case-insensitively — against the other tables AND the
|
|
13
|
+
* defined names (Excel refuses a table named like an existing defined name, and a defined name
|
|
14
|
+
* spelled like an existing table).
|
|
15
|
+
*
|
|
16
|
+
* Both engines create and rename tables through these checks (the rnc store mirrors them in Rust and
|
|
17
|
+
* surfaces the same messages through its `rejections` channel), and the table editor's validation
|
|
18
|
+
* schema shows the same text under the name field.
|
|
19
|
+
*/
|
|
20
|
+
exports.TABLE_NAME_MAX_LENGTH = 255;
|
|
21
|
+
// Built with `RegExp` (not literals) so the `u` flag survives the CJS build's ES5 target.
|
|
22
|
+
var LEADING_CHAR = new RegExp("^[\\p{L}_\\\\]", "u");
|
|
23
|
+
var BODY_CHARS = new RegExp("^[\\p{L}\\p{N}._]*$", "u");
|
|
24
|
+
/** `A1`-style — up to three ASCII column letters then a row number. */
|
|
25
|
+
var A1_REFERENCE = /^[A-Za-z]{1,3}\d+$/;
|
|
26
|
+
/** `R1C1`-style — `R`/`C` each followed by an optional index (`RC`, `R1C`, `R1C1`). */
|
|
27
|
+
var R1C1_REFERENCE = /^[Rr]\d*[Cc]\d*$/;
|
|
28
|
+
/** `C` and `R` alone select the active cell's column / row in the Name Box. */
|
|
29
|
+
var RESERVED_SHORTCUT = /^[CcRr]$/;
|
|
30
|
+
exports.TABLE_NAME_REQUIRED_MESSAGE = "Enter a table name.";
|
|
31
|
+
exports.TABLE_NAME_TOO_LONG_MESSAGE = "Table names can't be longer than ".concat(exports.TABLE_NAME_MAX_LENGTH, " characters.");
|
|
32
|
+
exports.TABLE_NAME_SPACES_MESSAGE = "Table names can't contain spaces.";
|
|
33
|
+
exports.TABLE_NAME_LEADING_CHAR_MESSAGE = "Table names must start with a letter, an underscore (_) or a backslash (\\).";
|
|
34
|
+
exports.TABLE_NAME_INVALID_CHAR_MESSAGE = "Table names can only contain letters, numbers, periods (.) and underscores (_).";
|
|
35
|
+
exports.TABLE_NAME_CELL_REFERENCE_MESSAGE = "Table names can't be a cell reference such as A1 or R1C1.";
|
|
36
|
+
var tableNameDuplicateMessage = function (existing) {
|
|
37
|
+
return "A table named \"".concat(existing, "\" already exists in this workbook. Table names must be unique.");
|
|
38
|
+
};
|
|
39
|
+
exports.tableNameDuplicateMessage = tableNameDuplicateMessage;
|
|
40
|
+
var tableNameDefinedNameMessage = function (existing) {
|
|
41
|
+
return "A defined name \"".concat(existing, "\" already exists in this workbook. Table names and defined names must be unique.");
|
|
42
|
+
};
|
|
43
|
+
exports.tableNameDefinedNameMessage = tableNameDefinedNameMessage;
|
|
44
|
+
/** `create-table` with an `id` an existing table already holds is refused on both engines (#668 T-56). */
|
|
45
|
+
var tableIdDuplicateMessage = function (id) {
|
|
46
|
+
return "A table with the id \"".concat(id, "\" already exists in this workbook.");
|
|
47
|
+
};
|
|
48
|
+
exports.tableIdDuplicateMessage = tableIdDuplicateMessage;
|
|
49
|
+
var definedNameTableNameMessage = function (existing) {
|
|
50
|
+
return "A table named \"".concat(existing, "\" already exists in this workbook. Table names and defined names must be unique.");
|
|
51
|
+
};
|
|
52
|
+
exports.definedNameTableNameMessage = definedNameTableNameMessage;
|
|
53
|
+
/** The entry of `names` that equals `name` case-insensitively, the way Excel compares names. */
|
|
54
|
+
var findNameCollision = function (name, names) {
|
|
55
|
+
var e_1, _a;
|
|
56
|
+
if (!names) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
var lower = name.toLowerCase();
|
|
60
|
+
try {
|
|
61
|
+
for (var names_1 = tslib_1.__values(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) {
|
|
62
|
+
var existing = names_1_1.value;
|
|
63
|
+
if (existing.toLowerCase() === lower) {
|
|
64
|
+
return existing;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
69
|
+
finally {
|
|
70
|
+
try {
|
|
71
|
+
if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1);
|
|
72
|
+
}
|
|
73
|
+
finally { if (e_1) throw e_1.error; }
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
};
|
|
77
|
+
/** True when `name` reads as a cell reference in either A1 or R1C1 notation. */
|
|
78
|
+
var isCellReferenceLikeName = function (name) {
|
|
79
|
+
return A1_REFERENCE.test(name) ||
|
|
80
|
+
R1C1_REFERENCE.test(name) ||
|
|
81
|
+
RESERVED_SHORTCUT.test(name);
|
|
82
|
+
};
|
|
83
|
+
exports.isCellReferenceLikeName = isCellReferenceLikeName;
|
|
84
|
+
/**
|
|
85
|
+
* The reason `name` is not an acceptable table name, or `undefined` when it is. `existingNames` are
|
|
86
|
+
* the OTHER tables' names in the workbook (leave the table being renamed out of it) and
|
|
87
|
+
* `existingDefinedNames` the workbook's defined names; duplicates against either are detected
|
|
88
|
+
* case-insensitively, the way Excel compares names.
|
|
89
|
+
*/
|
|
90
|
+
var validateTableName = function (name, existingNames, existingDefinedNames) {
|
|
91
|
+
if (!name) {
|
|
92
|
+
return exports.TABLE_NAME_REQUIRED_MESSAGE;
|
|
93
|
+
}
|
|
94
|
+
if (name.length > exports.TABLE_NAME_MAX_LENGTH) {
|
|
95
|
+
return exports.TABLE_NAME_TOO_LONG_MESSAGE;
|
|
96
|
+
}
|
|
97
|
+
if (/\s/.test(name)) {
|
|
98
|
+
return exports.TABLE_NAME_SPACES_MESSAGE;
|
|
99
|
+
}
|
|
100
|
+
if (!LEADING_CHAR.test(name)) {
|
|
101
|
+
return exports.TABLE_NAME_LEADING_CHAR_MESSAGE;
|
|
102
|
+
}
|
|
103
|
+
if (!BODY_CHARS.test(name.slice(1))) {
|
|
104
|
+
return exports.TABLE_NAME_INVALID_CHAR_MESSAGE;
|
|
105
|
+
}
|
|
106
|
+
if ((0, exports.isCellReferenceLikeName)(name)) {
|
|
107
|
+
return exports.TABLE_NAME_CELL_REFERENCE_MESSAGE;
|
|
108
|
+
}
|
|
109
|
+
var duplicate = findNameCollision(name, existingNames);
|
|
110
|
+
if (duplicate !== undefined) {
|
|
111
|
+
return (0, exports.tableNameDuplicateMessage)(duplicate);
|
|
112
|
+
}
|
|
113
|
+
var definedName = findNameCollision(name, existingDefinedNames);
|
|
114
|
+
if (definedName !== undefined) {
|
|
115
|
+
return (0, exports.tableNameDefinedNameMessage)(definedName);
|
|
116
|
+
}
|
|
117
|
+
return undefined;
|
|
118
|
+
};
|
|
119
|
+
exports.validateTableName = validateTableName;
|
|
120
|
+
var isValidTableName = function (name, existingNames, existingDefinedNames) {
|
|
121
|
+
return (0, exports.validateTableName)(name, existingNames, existingDefinedNames) === undefined;
|
|
122
|
+
};
|
|
123
|
+
exports.isValidTableName = isValidTableName;
|
|
124
|
+
/**
|
|
125
|
+
* The reason a defined name `name` cannot be created or renamed to — it is spelled like one of
|
|
126
|
+
* `tableNames` (case-insensitive) — or `undefined` when no table holds it. Excel keeps tables and
|
|
127
|
+
* defined names in one namespace.
|
|
128
|
+
*/
|
|
129
|
+
var validateDefinedNameAgainstTables = function (name, tableNames) {
|
|
130
|
+
var table = findNameCollision(name, tableNames);
|
|
131
|
+
return table === undefined ? undefined : (0, exports.definedNameTableNameMessage)(table);
|
|
132
|
+
};
|
|
133
|
+
exports.validateDefinedNameAgainstTables = validateDefinedNameAgainstTables;
|
|
134
|
+
/**
|
|
135
|
+
* The default name for a new table: `Table1`, `Table2`, … — the LOWEST number no existing table
|
|
136
|
+
* uses (case-insensitive), so a deleted table's number is reissued and the result never collides.
|
|
137
|
+
* `format` localises the pattern (`(n) => \`Tabelle${n}\``).
|
|
138
|
+
*/
|
|
139
|
+
var getNextTableName = function (existingNames, format) {
|
|
140
|
+
var e_2, _a;
|
|
141
|
+
if (format === void 0) { format = function (index) { return "Table".concat(index); }; }
|
|
142
|
+
var taken = new Set();
|
|
143
|
+
try {
|
|
144
|
+
for (var existingNames_1 = tslib_1.__values(existingNames), existingNames_1_1 = existingNames_1.next(); !existingNames_1_1.done; existingNames_1_1 = existingNames_1.next()) {
|
|
145
|
+
var name_1 = existingNames_1_1.value;
|
|
146
|
+
taken.add(name_1.toLowerCase());
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
150
|
+
finally {
|
|
151
|
+
try {
|
|
152
|
+
if (existingNames_1_1 && !existingNames_1_1.done && (_a = existingNames_1.return)) _a.call(existingNames_1);
|
|
153
|
+
}
|
|
154
|
+
finally { if (e_2) throw e_2.error; }
|
|
155
|
+
}
|
|
156
|
+
var index = 1;
|
|
157
|
+
while (taken.has(format(index).toLowerCase())) {
|
|
158
|
+
index++;
|
|
159
|
+
}
|
|
160
|
+
return format(index);
|
|
161
|
+
};
|
|
162
|
+
exports.getNextTableName = getNextTableName;
|
|
163
|
+
/**
|
|
164
|
+
* The name for a copy of table `base`: `Sales2`, `Sales3`, … — the LOWEST number no existing table
|
|
165
|
+
* uses (case-insensitive), the way Excel names the table on a duplicated sheet.
|
|
166
|
+
*/
|
|
167
|
+
var getNextTableCopyName = function (base, existingNames) {
|
|
168
|
+
var e_3, _a;
|
|
169
|
+
var taken = new Set();
|
|
170
|
+
try {
|
|
171
|
+
for (var existingNames_2 = tslib_1.__values(existingNames), existingNames_2_1 = existingNames_2.next(); !existingNames_2_1.done; existingNames_2_1 = existingNames_2.next()) {
|
|
172
|
+
var name_2 = existingNames_2_1.value;
|
|
173
|
+
taken.add(name_2.toLowerCase());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
177
|
+
finally {
|
|
178
|
+
try {
|
|
179
|
+
if (existingNames_2_1 && !existingNames_2_1.done && (_a = existingNames_2.return)) _a.call(existingNames_2);
|
|
180
|
+
}
|
|
181
|
+
finally { if (e_3) throw e_3.error; }
|
|
182
|
+
}
|
|
183
|
+
var index = 2;
|
|
184
|
+
while (taken.has("".concat(base).concat(index).toLowerCase())) {
|
|
185
|
+
index++;
|
|
186
|
+
}
|
|
187
|
+
return "".concat(base).concat(index);
|
|
188
|
+
};
|
|
189
|
+
exports.getNextTableCopyName = getNextTableCopyName;
|
|
@@ -32,6 +32,15 @@ export type BandingProperties = {
|
|
|
32
32
|
secondBandBorder?: Maybe<Borders>;
|
|
33
33
|
totalRowColor?: Maybe<Color>;
|
|
34
34
|
totalRowBorder?: Maybe<Borders>;
|
|
35
|
+
/**
|
|
36
|
+
* Fill of the table's first / last column when the table shows them (`TableView.showFirstColumn`
|
|
37
|
+
* / `showLastColumn` — Excel's Table Design → First Column / Last Column). Every built-in style
|
|
38
|
+
* emphasises those columns in bold; only the Dark styles add a fill.
|
|
39
|
+
*/
|
|
40
|
+
firstColumnColor?: Maybe<Color>;
|
|
41
|
+
lastColumnColor?: Maybe<Color>;
|
|
42
|
+
/** Excel's `totalRow` style element bolds the totals row. */
|
|
43
|
+
totalRowBold?: Maybe<boolean>;
|
|
35
44
|
};
|
|
36
45
|
export type BandedDefinition = {
|
|
37
46
|
rowProperties?: Maybe<BandingProperties>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-styles.d.ts","sourceRoot":"","sources":["../../table-styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAGb,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"table-styles.d.ts","sourceRoot":"","sources":["../../table-styles.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/table-styles.js
CHANGED
|
@@ -12,10 +12,12 @@ var colorIndexes = [1, 4, 5, 6, 7, 8, 9];
|
|
|
12
12
|
* Get table border styles map with all table themes and their banded definitions
|
|
13
13
|
*/
|
|
14
14
|
var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
15
|
+
var e_1, _a, e_2, _b;
|
|
16
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
15
17
|
var runningLightIndex = 1;
|
|
16
18
|
var runningMediumIndex = 1;
|
|
17
19
|
var runningDarkIndex = 1;
|
|
18
|
-
|
|
20
|
+
var styles = new Map([
|
|
19
21
|
[
|
|
20
22
|
"Light",
|
|
21
23
|
tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([
|
|
@@ -280,6 +282,10 @@ var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
|
280
282
|
tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(colorIndexes.map(function (value) {
|
|
281
283
|
var firstTint = value - 1 === 0 ? 0.25 : -0.25;
|
|
282
284
|
var secondTint = value - 1 === 0 ? 0.5 : 0;
|
|
285
|
+
var edgeColumnColor = {
|
|
286
|
+
theme: value,
|
|
287
|
+
tint: value - 1 === 0 ? 0.15 : -0.5,
|
|
288
|
+
};
|
|
283
289
|
return [
|
|
284
290
|
("TableStyleDark" + runningDarkIndex++),
|
|
285
291
|
firstTint,
|
|
@@ -295,6 +301,8 @@ var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
|
295
301
|
theme: value,
|
|
296
302
|
tint: secondTint,
|
|
297
303
|
},
|
|
304
|
+
firstColumnColor: edgeColumnColor,
|
|
305
|
+
lastColumnColor: edgeColumnColor,
|
|
298
306
|
},
|
|
299
307
|
columnProperties: showColumnStripes
|
|
300
308
|
? {
|
|
@@ -309,6 +317,10 @@ var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
|
309
317
|
})), false), tslib_1.__read([1, 5, 7, 9].map(function (value) {
|
|
310
318
|
var firstTint = value - 1 === 0 ? -0.35 : 0.6;
|
|
311
319
|
var secondTint = value - 1 === 0 ? -0.15 : 0.8;
|
|
320
|
+
var edgeColumnColor = {
|
|
321
|
+
theme: value - 1,
|
|
322
|
+
tint: value - 1 === 0 ? -0.5 : 0.4,
|
|
323
|
+
};
|
|
312
324
|
return [
|
|
313
325
|
("TableStyleDark" + runningDarkIndex++),
|
|
314
326
|
firstTint,
|
|
@@ -324,6 +336,8 @@ var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
|
324
336
|
theme: value - 1,
|
|
325
337
|
tint: secondTint,
|
|
326
338
|
},
|
|
339
|
+
firstColumnColor: edgeColumnColor,
|
|
340
|
+
lastColumnColor: edgeColumnColor,
|
|
327
341
|
},
|
|
328
342
|
columnProperties: showColumnStripes
|
|
329
343
|
? {
|
|
@@ -338,6 +352,44 @@ var getTableBorderStyles = function (showRowStripes, showColumnStripes) {
|
|
|
338
352
|
})), false),
|
|
339
353
|
],
|
|
340
354
|
]);
|
|
355
|
+
try {
|
|
356
|
+
// Excel's built-in table styles bold the totals row and rule it with a double top border in
|
|
357
|
+
// the style's accent colour — the header border's colour, else the header fill's, else the
|
|
358
|
+
// stripe border's.
|
|
359
|
+
for (var _m = tslib_1.__values(styles.values()), _o = _m.next(); !_o.done; _o = _m.next()) {
|
|
360
|
+
var entries = _o.value;
|
|
361
|
+
try {
|
|
362
|
+
for (var entries_1 = (e_2 = void 0, tslib_1.__values(entries)), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
|
|
363
|
+
var _p = tslib_1.__read(entries_1_1.value, 4), bandDefinition = _p[3];
|
|
364
|
+
var rows = bandDefinition === null || bandDefinition === void 0 ? void 0 : bandDefinition.rowProperties;
|
|
365
|
+
if (!rows)
|
|
366
|
+
continue;
|
|
367
|
+
rows.totalRowBold = true;
|
|
368
|
+
var accent = (_j = (_h = (_e = (_d = (_c = rows.headerBorder) === null || _c === void 0 ? void 0 : _c.top) === null || _d === void 0 ? void 0 : _d.color) !== null && _e !== void 0 ? _e : (_g = (_f = rows.headerBorder) === null || _f === void 0 ? void 0 : _f.bottom) === null || _g === void 0 ? void 0 : _g.color) !== null && _h !== void 0 ? _h : rows.headerColor) !== null && _j !== void 0 ? _j : (_l = (_k = rows.firstBandBorder) === null || _k === void 0 ? void 0 : _k.bottom) === null || _l === void 0 ? void 0 : _l.color;
|
|
369
|
+
if (accent && !rows.totalRowBorder) {
|
|
370
|
+
rows.totalRowBorder = {
|
|
371
|
+
top: { width: 1, style: "double", color: accent },
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
377
|
+
finally {
|
|
378
|
+
try {
|
|
379
|
+
if (entries_1_1 && !entries_1_1.done && (_b = entries_1.return)) _b.call(entries_1);
|
|
380
|
+
}
|
|
381
|
+
finally { if (e_2) throw e_2.error; }
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
386
|
+
finally {
|
|
387
|
+
try {
|
|
388
|
+
if (_o && !_o.done && (_a = _m.return)) _a.call(_m);
|
|
389
|
+
}
|
|
390
|
+
finally { if (e_1) throw e_1.error; }
|
|
391
|
+
}
|
|
392
|
+
return styles;
|
|
341
393
|
};
|
|
342
394
|
exports.getTableBorderStyles = getTableBorderStyles;
|
|
343
395
|
/**
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel's table totals row: the `totalsRowFunction` values a `<tableColumn>` carries
|
|
3
|
+
* (ECMA-376 `ST_TotalsRowFunction`), the hidden-row-aware `SUBTOTAL` number each one
|
|
4
|
+
* writes into the totals cell, and the structured-reference formula for it.
|
|
5
|
+
*/
|
|
6
|
+
export declare const TOTALS_ROW_FUNCTIONS: readonly ["none", "average", "count", "countNums", "max", "min", "sum", "stdDev", "var", "custom"];
|
|
7
|
+
export type TotalsRowFunction = (typeof TOTALS_ROW_FUNCTIONS)[number];
|
|
8
|
+
/**
|
|
9
|
+
* `SUBTOTAL` function numbers of the 101–111 family (ignore rows hidden by a filter),
|
|
10
|
+
* as Excel writes them into a totals-row cell. `none` and `custom` have none.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TOTALS_ROW_FUNCTION_SUBTOTAL: Readonly<Partial<Record<TotalsRowFunction, number>>>;
|
|
13
|
+
export declare const isTotalsRowFunction: (value: unknown) => value is TotalsRowFunction;
|
|
14
|
+
/**
|
|
15
|
+
* Escape a column name for use inside a structured reference: `[`, `]`, `#`
|
|
16
|
+
* and `'` are prefixed with `'`, as Excel does (`Sales[Amount '[est']]`).
|
|
17
|
+
*/
|
|
18
|
+
export declare const escapeStructuredColumnName: (name: string) => string;
|
|
19
|
+
/**
|
|
20
|
+
* The totals-row formula for `fn` over a table column, qualified with the table
|
|
21
|
+
* name so it evaluates from any engine and matches what Excel writes:
|
|
22
|
+
* `=SUBTOTAL(109,Sales[Amount])`. `undefined` for `none` / `custom`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const getTotalsRowFormula: (fn: TotalsRowFunction, tableName: string, columnName: string) => string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Recognise the aggregation a totals-row formula uses. Both the hidden-row-aware
|
|
27
|
+
* (1xx) and plain (1–11) `SUBTOTAL` numbers map to the same function; anything
|
|
28
|
+
* else is `none`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const getTotalsRowFunctionFromFormula: (formula: string | null | undefined) => TotalsRowFunction;
|
|
31
|
+
//# sourceMappingURL=table-totals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-totals.d.ts","sourceRoot":"","sources":["../../table-totals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,oGAWvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CACjD,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAU3C,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,OAAO,KACb,KAAK,IAAI,iBAEiD,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,WACnB,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,IAAI,iBAAiB,EACrB,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,MAAM,GAAG,SAQX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,GAC1C,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,KACjC,iBAcF,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTotalsRowFunctionFromFormula = exports.getTotalsRowFormula = exports.escapeStructuredColumnName = exports.isTotalsRowFunction = exports.TOTALS_ROW_FUNCTION_SUBTOTAL = exports.TOTALS_ROW_FUNCTIONS = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Excel's table totals row: the `totalsRowFunction` values a `<tableColumn>` carries
|
|
7
|
+
* (ECMA-376 `ST_TotalsRowFunction`), the hidden-row-aware `SUBTOTAL` number each one
|
|
8
|
+
* writes into the totals cell, and the structured-reference formula for it.
|
|
9
|
+
*/
|
|
10
|
+
exports.TOTALS_ROW_FUNCTIONS = [
|
|
11
|
+
"none",
|
|
12
|
+
"average",
|
|
13
|
+
"count",
|
|
14
|
+
"countNums",
|
|
15
|
+
"max",
|
|
16
|
+
"min",
|
|
17
|
+
"sum",
|
|
18
|
+
"stdDev",
|
|
19
|
+
"var",
|
|
20
|
+
"custom",
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* `SUBTOTAL` function numbers of the 101–111 family (ignore rows hidden by a filter),
|
|
24
|
+
* as Excel writes them into a totals-row cell. `none` and `custom` have none.
|
|
25
|
+
*/
|
|
26
|
+
exports.TOTALS_ROW_FUNCTION_SUBTOTAL = {
|
|
27
|
+
average: 101,
|
|
28
|
+
countNums: 102,
|
|
29
|
+
count: 103,
|
|
30
|
+
max: 104,
|
|
31
|
+
min: 105,
|
|
32
|
+
stdDev: 107,
|
|
33
|
+
sum: 109,
|
|
34
|
+
var: 110,
|
|
35
|
+
};
|
|
36
|
+
var isTotalsRowFunction = function (value) {
|
|
37
|
+
return typeof value === "string" &&
|
|
38
|
+
exports.TOTALS_ROW_FUNCTIONS.includes(value);
|
|
39
|
+
};
|
|
40
|
+
exports.isTotalsRowFunction = isTotalsRowFunction;
|
|
41
|
+
/**
|
|
42
|
+
* Escape a column name for use inside a structured reference: `[`, `]`, `#`
|
|
43
|
+
* and `'` are prefixed with `'`, as Excel does (`Sales[Amount '[est']]`).
|
|
44
|
+
*/
|
|
45
|
+
var escapeStructuredColumnName = function (name) {
|
|
46
|
+
return name.replace(/(['\[\]#])/g, "'$1");
|
|
47
|
+
};
|
|
48
|
+
exports.escapeStructuredColumnName = escapeStructuredColumnName;
|
|
49
|
+
/**
|
|
50
|
+
* The totals-row formula for `fn` over a table column, qualified with the table
|
|
51
|
+
* name so it evaluates from any engine and matches what Excel writes:
|
|
52
|
+
* `=SUBTOTAL(109,Sales[Amount])`. `undefined` for `none` / `custom`.
|
|
53
|
+
*/
|
|
54
|
+
var getTotalsRowFormula = function (fn, tableName, columnName) {
|
|
55
|
+
var subtotal = exports.TOTALS_ROW_FUNCTION_SUBTOTAL[fn];
|
|
56
|
+
if (subtotal === undefined) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
return "=SUBTOTAL(".concat(subtotal, ",").concat(tableName, "[").concat((0, exports.escapeStructuredColumnName)(columnName), "])");
|
|
60
|
+
};
|
|
61
|
+
exports.getTotalsRowFormula = getTotalsRowFormula;
|
|
62
|
+
/**
|
|
63
|
+
* Recognise the aggregation a totals-row formula uses. Both the hidden-row-aware
|
|
64
|
+
* (1xx) and plain (1–11) `SUBTOTAL` numbers map to the same function; anything
|
|
65
|
+
* else is `none`.
|
|
66
|
+
*/
|
|
67
|
+
var getTotalsRowFunctionFromFormula = function (formula) {
|
|
68
|
+
var _a;
|
|
69
|
+
if (!formula) {
|
|
70
|
+
return "none";
|
|
71
|
+
}
|
|
72
|
+
var match = /^\s*=\s*SUBTOTAL\s*\(\s*(\d{1,3})\s*,/i.exec(formula);
|
|
73
|
+
if (!match) {
|
|
74
|
+
return "none";
|
|
75
|
+
}
|
|
76
|
+
var number = Number(match[1]);
|
|
77
|
+
var normalized = number > 100 ? number - 100 : number;
|
|
78
|
+
var found = Object.entries(exports.TOTALS_ROW_FUNCTION_SUBTOTAL).find(function (_a) {
|
|
79
|
+
var _b = tslib_1.__read(_a, 2), subtotal = _b[1];
|
|
80
|
+
return subtotal - 100 === normalized;
|
|
81
|
+
});
|
|
82
|
+
return (_a = found === null || found === void 0 ? void 0 : found[0]) !== null && _a !== void 0 ? _a : "none";
|
|
83
|
+
};
|
|
84
|
+
exports.getTotalsRowFunctionFromFormula = getTotalsRowFunctionFromFormula;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../array.ts","../../cell-data-helpers.ts","../../color.ts","../../colors.ts","../../conditional-format.ts","../../content-hash.ts","../../data-validation.ts","../../date.ts","../../dom.ts","../../excel-number-format.ts","../../formatter.ts","../../formula-refs.ts","../../formula.ts","../../index.ts","../../keyboard.ts","../../locale.ts","../../log.ts","../../memoize.ts","../../numbers.ts","../../selection.ts","../../shared-string-canonical.ts","../../sheet-span.ts","../../sort.ts","../../string.ts","../../table-styles.ts","../../typeguards.ts","../../uuid.ts","../../vitest.config.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../array.ts","../../cell-data-helpers.ts","../../color.ts","../../colors.ts","../../conditional-format.ts","../../content-hash.ts","../../data-validation.ts","../../date.ts","../../dom.ts","../../excel-number-format.ts","../../formatter.ts","../../formula-locale.ts","../../formula-refs.ts","../../formula.ts","../../index.ts","../../keyboard.ts","../../locale.ts","../../log.ts","../../memoize.ts","../../numbers.ts","../../selection.ts","../../shared-string-canonical.ts","../../sheet-span.ts","../../sort.ts","../../sparkline-groups.ts","../../string.ts","../../table-names.ts","../../table-styles.ts","../../table-totals.ts","../../typeguards.ts","../../uuid.ts","../../vitest.config.ts","../../formula-locale/formula-locale-data.generated.ts"],"version":"5.8.3"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Excel formula syntax of one UI language: the characters that vary per locale. */
|
|
2
|
+
export interface FormulaLocaleSyntaxData {
|
|
3
|
+
/** Decimal mark inside number literals (`1.5` / `1,5`). */
|
|
4
|
+
decimalSeparator: string;
|
|
5
|
+
/** Function-argument separator; also Excel's reference-union operator (`SUM(A1:A2,B1:B2)`). */
|
|
6
|
+
argumentSeparator: string;
|
|
7
|
+
/** Separator between the columns of an array constant (`{1,2;3,4}` → `,`). */
|
|
8
|
+
arrayColumnSeparator: string;
|
|
9
|
+
/** Separator between the rows of an array constant (`{1,2;3,4}` → `;`). */
|
|
10
|
+
arrayRowSeparator: string;
|
|
11
|
+
}
|
|
12
|
+
/** One locale's row of the table, as imported. Functions/errors map the canonical (English) spelling
|
|
13
|
+
* to the localized one; names without an entry keep their English spelling in that locale. */
|
|
14
|
+
export interface FormulaLocaleDataEntry {
|
|
15
|
+
/** Display name of the language, in the language. */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Tag whose function/error dictionaries this locale inherits (Swiss variants of de/fr/it). */
|
|
18
|
+
extends?: string;
|
|
19
|
+
syntax: FormulaLocaleSyntaxData;
|
|
20
|
+
/** Canonical function name → localized function name (non-identity entries only). */
|
|
21
|
+
functions?: Readonly<Record<string, string>>;
|
|
22
|
+
/** Canonical error value → localized error value (non-identity entries only). */
|
|
23
|
+
errors?: Readonly<Record<string, string>>;
|
|
24
|
+
/** Functions the maintainers could not confirm a localized name for; they resolve to English. */
|
|
25
|
+
uncertain?: readonly string[];
|
|
26
|
+
}
|
|
27
|
+
/** Provenance of the table (see the JSON source). */
|
|
28
|
+
export declare const FORMULA_LOCALE_DATA_SOURCES: {
|
|
29
|
+
readonly functionsAndErrors: {
|
|
30
|
+
readonly description: "Excel's localized function names and error values per UI language, as collected by PhpSpreadsheet (MIT) in Translations.xlsx.";
|
|
31
|
+
readonly url: "https://raw.githubusercontent.com/PHPOffice/PhpSpreadsheet/master/src/PhpSpreadsheet/Calculation/locale/Translations.xlsx";
|
|
32
|
+
readonly sha256: "2e06ff637feaa81934e40c03744e2ba05f4a0973d0eb331263daee82d80d18f4";
|
|
33
|
+
};
|
|
34
|
+
readonly syntax: {
|
|
35
|
+
readonly description: "Excel formula syntax per language. Decimal/argument separators: the Windows regional defaults of the language (Excel's argument separator doubles as its reference-union operator). Array-constant separators: read off Microsoft's localized function reference for MDETERM and MINVERSE (support.microsoft.com/<locale>/excel/functions/{mdeterm,minverse}-function), whose examples localize the English {3,6,1;1,1,0;3,10,2}. Swiss variants derive from Excel's xlAlternateArraySeparator rule.";
|
|
36
|
+
readonly retrieved: "2026-09-17";
|
|
37
|
+
};
|
|
38
|
+
readonly curated: {
|
|
39
|
+
readonly description: "Functions newer than the xlsx (dynamic arrays, LAMBDA helpers, TEXTSPLIT family, *B byte functions) come from formula-locale-overrides.json; names the maintainers could not confirm are listed under `uncertain` and resolve to English.";
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/** Excel's formula syntax + function/error dictionaries per BCP-47 language (or language-REGION) tag. */
|
|
43
|
+
export declare const FORMULA_LOCALE_DATA: Readonly<Record<string, FormulaLocaleDataEntry>>;
|
|
44
|
+
//# sourceMappingURL=formula-locale-data.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula-locale-data.generated.d.ts","sourceRoot":"","sources":["../../../formula-locale/formula-locale-data.generated.ts"],"names":[],"mappings":"AAMA,oFAAoF;AACpF,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;8FAC8F;AAC9F,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,uBAAuB,CAAC;IAChC,qFAAqF;IACrF,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,iFAAiF;IACjF,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,iGAAiG;IACjG,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,qDAAqD;AACrD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;CAa5B,CAAC;AAEb,yGAAyG;AACzG,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAs6KhF,CAAC"}
|