xls-codec 1.0.1 → 2.0.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/README.md +128 -23
- package/dist/biff/bof-writer.cjs +18 -0
- package/dist/biff/bof-writer.d.cts +5 -0
- package/dist/biff/bof-writer.d.ts +5 -0
- package/dist/biff/bof-writer.js +17 -0
- package/dist/biff/builder.cjs +48 -0
- package/dist/biff/builder.d.cts +17 -0
- package/dist/biff/builder.d.ts +17 -0
- package/dist/biff/builder.js +47 -0
- package/dist/biff/cursor.cjs +4 -0
- package/dist/biff/cursor.d.cts +1 -27
- package/dist/biff/cursor.d.ts +1 -27
- package/dist/biff/cursor.js +4 -0
- package/dist/biff/errors.cjs +7 -0
- package/dist/biff/errors.d.cts +3 -1
- package/dist/biff/errors.d.ts +3 -1
- package/dist/biff/errors.js +7 -1
- package/dist/biff/print-setup.cjs +108 -0
- package/dist/biff/print-setup.d.cts +2 -0
- package/dist/biff/print-setup.d.ts +2 -0
- package/dist/biff/print-setup.js +103 -0
- package/dist/biff/ptg-functions.cjs +383 -0
- package/dist/biff/ptg-functions.d.cts +7 -0
- package/dist/biff/ptg-functions.d.ts +7 -0
- package/dist/biff/ptg-functions.js +381 -0
- package/dist/biff/ptg.cjs +319 -0
- package/dist/biff/ptg.d.cts +2 -0
- package/dist/biff/ptg.d.ts +2 -0
- package/dist/biff/ptg.js +318 -0
- package/dist/biff/record-types.cjs +60 -0
- package/dist/biff/record-types.d.cts +41 -1
- package/dist/biff/record-types.d.ts +41 -1
- package/dist/biff/record-types.js +41 -1
- package/dist/biff/record-writer.cjs +29 -0
- package/dist/biff/record-writer.d.cts +7 -0
- package/dist/biff/record-writer.d.ts +7 -0
- package/dist/biff/record-writer.js +27 -0
- package/dist/biff/string-writer.cjs +58 -0
- package/dist/biff/string-writer.d.cts +13 -0
- package/dist/biff/string-writer.d.ts +13 -0
- package/dist/biff/string-writer.js +55 -0
- package/dist/biff/strings.d.cts +1 -1
- package/dist/biff/strings.d.ts +1 -1
- package/dist/biff/substreams.d.cts +1 -20
- package/dist/biff/substreams.d.ts +1 -20
- package/dist/biff/write-errors.cjs +10 -0
- package/dist/biff/write-errors.d.cts +6 -0
- package/dist/biff/write-errors.d.ts +6 -0
- package/dist/biff/write-errors.js +9 -0
- package/dist/biff/xf-colors.cjs +374 -0
- package/dist/biff/xf-colors.d.cts +2 -0
- package/dist/biff/xf-colors.d.ts +2 -0
- package/dist/biff/xf-colors.js +339 -0
- package/dist/biff/xf-writer.cjs +96 -0
- package/dist/biff/xf-writer.d.cts +29 -0
- package/dist/biff/xf-writer.d.ts +29 -0
- package/dist/biff/xf-writer.js +90 -0
- package/dist/container.cjs +13 -4
- package/dist/container.d.cts +10 -3
- package/dist/container.d.ts +10 -3
- package/dist/container.js +12 -4
- package/dist/content.cjs +123 -18
- package/dist/content.js +123 -18
- package/dist/cursor-VMtw9uVP.d.cts +30 -0
- package/dist/cursor-VMtw9uVP.d.ts +30 -0
- package/dist/index.cjs +71 -5
- package/dist/index.d.cts +20 -10
- package/dist/index.d.ts +20 -10
- package/dist/index.js +17 -7
- package/dist/metadata.cjs +14 -0
- package/dist/metadata.d.cts +6 -0
- package/dist/metadata.d.ts +6 -0
- package/dist/metadata.js +13 -0
- package/dist/print-names-D-njuzVw.d.cts +41 -0
- package/dist/print-names-DUlpVE00.d.ts +41 -0
- package/dist/print-setup-B_ihDvm5.d.cts +57 -0
- package/dist/print-setup-B_ihDvm5.d.ts +57 -0
- package/dist/ptg-B2K8t3js.d.cts +21 -0
- package/dist/ptg-B2K8t3js.d.ts +21 -0
- package/dist/serial.cjs +41 -0
- package/dist/serial.d.cts +7 -1
- package/dist/serial.d.ts +7 -1
- package/dist/serial.js +39 -1
- package/dist/substreams-D7dQiJbp.d.ts +21 -0
- package/dist/substreams-Ddtvn_Vr.d.cts +21 -0
- package/dist/units.cjs +37 -0
- package/dist/units.d.cts +15 -1
- package/dist/units.d.ts +15 -1
- package/dist/units.js +33 -1
- package/dist/workbook/globals-writer.cjs +122 -0
- package/dist/workbook/globals-writer.d.cts +39 -0
- package/dist/workbook/globals-writer.d.ts +39 -0
- package/dist/workbook/globals-writer.js +120 -0
- package/dist/workbook/globals.cjs +72 -8
- package/dist/workbook/globals.d.cts +26 -2
- package/dist/workbook/globals.d.ts +26 -2
- package/dist/workbook/globals.js +71 -7
- package/dist/workbook/print-names.cjs +241 -0
- package/dist/workbook/print-names.d.cts +2 -0
- package/dist/workbook/print-names.d.ts +2 -0
- package/dist/workbook/print-names.js +238 -0
- package/dist/workbook/sheet-writer.cjs +277 -0
- package/dist/workbook/sheet-writer.d.cts +12 -0
- package/dist/workbook/sheet-writer.d.ts +12 -0
- package/dist/workbook/sheet-writer.js +276 -0
- package/dist/workbook/sheet.cjs +125 -17
- package/dist/workbook/sheet.d.cts +38 -4
- package/dist/workbook/sheet.d.ts +38 -4
- package/dist/workbook/sheet.js +125 -17
- package/dist/write.cjs +311 -0
- package/dist/write.d.cts +13 -0
- package/dist/write.d.ts +13 -0
- package/dist/write.js +309 -0
- package/dist/written-cells.cjs +26 -0
- package/dist/written-cells.d.cts +16 -0
- package/dist/written-cells.d.ts +16 -0
- package/dist/written-cells.js +24 -0
- package/dist/xf-colors-CehHZtBy.d.cts +91 -0
- package/dist/xf-colors-CpykR3B9.d.ts +91 -0
- package/package.json +4 -3
- package/dist/number-format.cjs +0 -298
- package/dist/number-format.d.cts +0 -32
- package/dist/number-format.d.ts +0 -32
- package/dist/number-format.js +0 -296
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
//#region src/biff/ptg-functions.ts
|
|
2
|
+
const FTAB_ENTRIES = [
|
|
3
|
+
[0, ["COUNT"]],
|
|
4
|
+
[1, ["IF"]],
|
|
5
|
+
[2, ["ISNA", 1]],
|
|
6
|
+
[3, ["ISERROR", 1]],
|
|
7
|
+
[4, ["SUM"]],
|
|
8
|
+
[5, ["AVERAGE"]],
|
|
9
|
+
[6, ["MIN"]],
|
|
10
|
+
[7, ["MAX"]],
|
|
11
|
+
[8, ["ROW"]],
|
|
12
|
+
[9, ["COLUMN"]],
|
|
13
|
+
[10, ["NA", 0]],
|
|
14
|
+
[11, ["NPV"]],
|
|
15
|
+
[12, ["STDEV"]],
|
|
16
|
+
[13, ["DOLLAR"]],
|
|
17
|
+
[14, ["FIXED"]],
|
|
18
|
+
[15, ["SIN", 1]],
|
|
19
|
+
[16, ["COS", 1]],
|
|
20
|
+
[17, ["TAN", 1]],
|
|
21
|
+
[18, ["ATAN", 1]],
|
|
22
|
+
[19, ["PI", 0]],
|
|
23
|
+
[20, ["SQRT", 1]],
|
|
24
|
+
[21, ["EXP", 1]],
|
|
25
|
+
[22, ["LN", 1]],
|
|
26
|
+
[23, ["LOG10", 1]],
|
|
27
|
+
[24, ["ABS", 1]],
|
|
28
|
+
[25, ["INT", 1]],
|
|
29
|
+
[26, ["SIGN", 1]],
|
|
30
|
+
[27, ["ROUND", 2]],
|
|
31
|
+
[28, ["LOOKUP"]],
|
|
32
|
+
[29, ["INDEX"]],
|
|
33
|
+
[30, ["REPT", 2]],
|
|
34
|
+
[31, ["MID", 3]],
|
|
35
|
+
[32, ["LEN", 1]],
|
|
36
|
+
[33, ["VALUE", 1]],
|
|
37
|
+
[34, ["TRUE", 0]],
|
|
38
|
+
[35, ["FALSE", 0]],
|
|
39
|
+
[36, ["AND"]],
|
|
40
|
+
[37, ["OR"]],
|
|
41
|
+
[38, ["NOT", 1]],
|
|
42
|
+
[39, ["MOD", 2]],
|
|
43
|
+
[40, ["DCOUNT", 3]],
|
|
44
|
+
[41, ["DSUM", 3]],
|
|
45
|
+
[42, ["DAVERAGE", 3]],
|
|
46
|
+
[43, ["DMIN", 3]],
|
|
47
|
+
[44, ["DMAX", 3]],
|
|
48
|
+
[45, ["DSTDEV", 3]],
|
|
49
|
+
[46, ["VAR"]],
|
|
50
|
+
[47, ["DVAR", 3]],
|
|
51
|
+
[48, ["TEXT", 2]],
|
|
52
|
+
[49, ["LINEST"]],
|
|
53
|
+
[50, ["TREND"]],
|
|
54
|
+
[51, ["LOGEST"]],
|
|
55
|
+
[52, ["GROWTH"]],
|
|
56
|
+
[53, ["GOTO", 1]],
|
|
57
|
+
[54, ["HALT"]],
|
|
58
|
+
[55, ["RETURN"]],
|
|
59
|
+
[56, ["PV"]],
|
|
60
|
+
[57, ["FV"]],
|
|
61
|
+
[58, ["NPER"]],
|
|
62
|
+
[59, ["PMT"]],
|
|
63
|
+
[60, ["RATE"]],
|
|
64
|
+
[61, ["MIRR", 3]],
|
|
65
|
+
[62, ["IRR"]],
|
|
66
|
+
[63, ["RAND", 0]],
|
|
67
|
+
[64, ["MATCH"]],
|
|
68
|
+
[65, ["DATE", 3]],
|
|
69
|
+
[66, ["TIME", 3]],
|
|
70
|
+
[67, ["DAY", 1]],
|
|
71
|
+
[68, ["MONTH", 1]],
|
|
72
|
+
[69, ["YEAR", 1]],
|
|
73
|
+
[70, ["WEEKDAY"]],
|
|
74
|
+
[71, ["HOUR", 1]],
|
|
75
|
+
[72, ["MINUTE", 1]],
|
|
76
|
+
[73, ["SECOND", 1]],
|
|
77
|
+
[74, ["NOW", 0]],
|
|
78
|
+
[75, ["AREAS", 1]],
|
|
79
|
+
[76, ["ROWS", 1]],
|
|
80
|
+
[77, ["COLUMNS", 1]],
|
|
81
|
+
[78, ["OFFSET"]],
|
|
82
|
+
[79, ["ABSREF", 2]],
|
|
83
|
+
[80, ["RELREF", 2]],
|
|
84
|
+
[81, ["ARGUMENT"]],
|
|
85
|
+
[82, ["SEARCH"]],
|
|
86
|
+
[83, ["TRANSPOSE", 1]],
|
|
87
|
+
[84, ["ERROR"]],
|
|
88
|
+
[85, ["STEP", 0]],
|
|
89
|
+
[86, ["TYPE", 1]],
|
|
90
|
+
[87, ["ECHO"]],
|
|
91
|
+
[88, ["SET.NAME"]],
|
|
92
|
+
[89, ["CALLER", 0]],
|
|
93
|
+
[90, ["DEREF", 1]],
|
|
94
|
+
[91, ["WINDOWS"]],
|
|
95
|
+
[92, ["SERIES"]],
|
|
96
|
+
[93, ["DOCUMENTS"]],
|
|
97
|
+
[94, ["ACTIVE.CELL", 0]],
|
|
98
|
+
[95, ["SELECTION", 0]],
|
|
99
|
+
[96, ["RESULT"]],
|
|
100
|
+
[97, ["ATAN2", 2]],
|
|
101
|
+
[98, ["ASIN", 1]],
|
|
102
|
+
[99, ["ACOS", 1]],
|
|
103
|
+
[100, ["CHOOSE"]],
|
|
104
|
+
[101, ["HLOOKUP"]],
|
|
105
|
+
[102, ["VLOOKUP"]],
|
|
106
|
+
[103, ["LINKS"]],
|
|
107
|
+
[104, ["INPUT"]],
|
|
108
|
+
[105, ["ISREF", 1]],
|
|
109
|
+
[106, ["GET.FORMULA", 1]],
|
|
110
|
+
[107, ["GET.NAME"]],
|
|
111
|
+
[108, ["SET.VALUE", 2]],
|
|
112
|
+
[109, ["LOG"]],
|
|
113
|
+
[110, ["EXEC"]],
|
|
114
|
+
[111, ["CHAR", 1]],
|
|
115
|
+
[112, ["LOWER", 1]],
|
|
116
|
+
[113, ["UPPER", 1]],
|
|
117
|
+
[114, ["PROPER", 1]],
|
|
118
|
+
[115, ["LEFT"]],
|
|
119
|
+
[116, ["RIGHT"]],
|
|
120
|
+
[117, ["EXACT", 2]],
|
|
121
|
+
[118, ["TRIM", 1]],
|
|
122
|
+
[119, ["REPLACE", 4]],
|
|
123
|
+
[120, ["SUBSTITUTE"]],
|
|
124
|
+
[121, ["CODE", 1]],
|
|
125
|
+
[122, ["NAMES"]],
|
|
126
|
+
[123, ["DIRECTORY"]],
|
|
127
|
+
[124, ["FIND"]],
|
|
128
|
+
[125, ["CELL"]],
|
|
129
|
+
[126, ["ISERR", 1]],
|
|
130
|
+
[127, ["ISTEXT", 1]],
|
|
131
|
+
[128, ["ISNUMBER", 1]],
|
|
132
|
+
[129, ["ISBLANK", 1]],
|
|
133
|
+
[130, ["T", 1]],
|
|
134
|
+
[131, ["N", 1]],
|
|
135
|
+
[132, ["FOPEN"]],
|
|
136
|
+
[133, ["FCLOSE", 1]],
|
|
137
|
+
[134, ["FSIZE", 1]],
|
|
138
|
+
[135, ["FREADLN", 1]],
|
|
139
|
+
[136, ["FREAD", 2]],
|
|
140
|
+
[137, ["FWRITELN", 2]],
|
|
141
|
+
[138, ["FWRITE", 2]],
|
|
142
|
+
[139, ["FPOS"]],
|
|
143
|
+
[140, ["DATEVALUE", 1]],
|
|
144
|
+
[141, ["TIMEVALUE", 1]],
|
|
145
|
+
[142, ["SLN", 3]],
|
|
146
|
+
[143, ["SYD", 4]],
|
|
147
|
+
[144, ["DDB"]],
|
|
148
|
+
[145, ["GET.DEF"]],
|
|
149
|
+
[146, ["REFTEXT"]],
|
|
150
|
+
[147, ["TEXTREF"]],
|
|
151
|
+
[148, ["INDIRECT"]],
|
|
152
|
+
[149, ["REGISTER"]],
|
|
153
|
+
[150, ["CALL"]],
|
|
154
|
+
[151, ["ADD.BAR"]],
|
|
155
|
+
[152, ["ADD.MENU"]],
|
|
156
|
+
[153, ["ADD.COMMAND"]],
|
|
157
|
+
[154, ["ENABLE.COMMAND"]],
|
|
158
|
+
[155, ["CHECK.COMMAND"]],
|
|
159
|
+
[156, ["RENAME.COMMAND"]],
|
|
160
|
+
[157, ["SHOW.BAR"]],
|
|
161
|
+
[158, ["DELETE.MENU"]],
|
|
162
|
+
[159, ["DELETE.COMMAND"]],
|
|
163
|
+
[160, ["GET.CHART.ITEM"]],
|
|
164
|
+
[161, ["DIALOG.BOX", 1]],
|
|
165
|
+
[162, ["CLEAN", 1]],
|
|
166
|
+
[163, ["MDETERM", 1]],
|
|
167
|
+
[164, ["MINVERSE", 1]],
|
|
168
|
+
[165, ["MMULT", 2]],
|
|
169
|
+
[166, ["FILES"]],
|
|
170
|
+
[167, ["IPMT"]],
|
|
171
|
+
[168, ["PPMT"]],
|
|
172
|
+
[169, ["COUNTA"]],
|
|
173
|
+
[170, ["CANCEL.KEY"]],
|
|
174
|
+
[171, ["FOR"]],
|
|
175
|
+
[172, ["WHILE", 1]],
|
|
176
|
+
[173, ["BREAK", 0]],
|
|
177
|
+
[174, ["NEXT", 0]],
|
|
178
|
+
[175, ["INITIATE", 2]],
|
|
179
|
+
[176, ["REQUEST", 2]],
|
|
180
|
+
[177, ["POKE", 3]],
|
|
181
|
+
[178, ["EXECUTE", 2]],
|
|
182
|
+
[179, ["TERMINATE", 1]],
|
|
183
|
+
[180, ["RESTART"]],
|
|
184
|
+
[181, ["HELP"]],
|
|
185
|
+
[182, ["GET.BAR"]],
|
|
186
|
+
[183, ["PRODUCT"]],
|
|
187
|
+
[184, ["FACT", 1]],
|
|
188
|
+
[185, ["GET.CELL"]],
|
|
189
|
+
[186, ["GET.WORKSPACE", 1]],
|
|
190
|
+
[187, ["GET.WINDOW"]],
|
|
191
|
+
[188, ["GET.DOCUMENT"]],
|
|
192
|
+
[189, ["DPRODUCT", 3]],
|
|
193
|
+
[190, ["ISNONTEXT", 1]],
|
|
194
|
+
[191, ["GET.NOTE"]],
|
|
195
|
+
[192, ["NOTE"]],
|
|
196
|
+
[193, ["STDEVP"]],
|
|
197
|
+
[194, ["VARP"]],
|
|
198
|
+
[195, ["DSTDEVP", 3]],
|
|
199
|
+
[196, ["DVARP", 3]],
|
|
200
|
+
[197, ["TRUNC"]],
|
|
201
|
+
[198, ["ISLOGICAL", 1]],
|
|
202
|
+
[199, ["DCOUNTA", 3]],
|
|
203
|
+
[200, ["DELETE.BAR", 1]],
|
|
204
|
+
[201, ["UNREGISTER", 1]],
|
|
205
|
+
[204, ["USDOLLAR"]],
|
|
206
|
+
[205, ["FINDB"]],
|
|
207
|
+
[206, ["SEARCHB"]],
|
|
208
|
+
[207, ["REPLACEB", 4]],
|
|
209
|
+
[208, ["LEFTB"]],
|
|
210
|
+
[209, ["RIGHTB"]],
|
|
211
|
+
[210, ["MIDB", 3]],
|
|
212
|
+
[211, ["LENB", 1]],
|
|
213
|
+
[212, ["ROUNDUP", 2]],
|
|
214
|
+
[213, ["ROUNDDOWN", 2]],
|
|
215
|
+
[214, ["ASC", 1]],
|
|
216
|
+
[215, ["DBCS", 1]],
|
|
217
|
+
[216, ["RANK"]],
|
|
218
|
+
[219, ["ADDRESS"]],
|
|
219
|
+
[220, ["DAYS360"]],
|
|
220
|
+
[221, ["TODAY", 0]],
|
|
221
|
+
[222, ["VDB"]],
|
|
222
|
+
[223, ["ELSE", 0]],
|
|
223
|
+
[224, ["ELSE.IF", 1]],
|
|
224
|
+
[225, ["END.IF", 0]],
|
|
225
|
+
[226, ["FOR.CELL"]],
|
|
226
|
+
[227, ["MEDIAN"]],
|
|
227
|
+
[228, ["SUMPRODUCT"]],
|
|
228
|
+
[229, ["SINH", 1]],
|
|
229
|
+
[230, ["COSH", 1]],
|
|
230
|
+
[231, ["TANH", 1]],
|
|
231
|
+
[232, ["ASINH", 1]],
|
|
232
|
+
[233, ["ACOSH", 1]],
|
|
233
|
+
[234, ["ATANH", 1]],
|
|
234
|
+
[235, ["DGET", 3]],
|
|
235
|
+
[236, ["CREATE.OBJECT"]],
|
|
236
|
+
[237, ["VOLATILE"]],
|
|
237
|
+
[238, ["LAST.ERROR", 0]],
|
|
238
|
+
[239, ["CUSTOM.UNDO"]],
|
|
239
|
+
[240, ["CUSTOM.REPEAT"]],
|
|
240
|
+
[241, ["FORMULA.CONVERT"]],
|
|
241
|
+
[242, ["GET.LINK.INFO"]],
|
|
242
|
+
[243, ["TEXT.BOX"]],
|
|
243
|
+
[244, ["INFO", 1]],
|
|
244
|
+
[245, ["GROUP", 0]],
|
|
245
|
+
[246, ["GET.OBJECT"]],
|
|
246
|
+
[247, ["DB"]],
|
|
247
|
+
[248, ["PAUSE"]],
|
|
248
|
+
[251, ["RESUME"]],
|
|
249
|
+
[252, ["FREQUENCY", 2]],
|
|
250
|
+
[253, ["ADD.TOOLBAR"]],
|
|
251
|
+
[254, ["DELETE.TOOLBAR", 1]],
|
|
252
|
+
[256, ["RESET.TOOLBAR", 1]],
|
|
253
|
+
[257, ["EVALUATE", 1]],
|
|
254
|
+
[258, ["GET.TOOLBAR"]],
|
|
255
|
+
[259, ["GET.TOOL"]],
|
|
256
|
+
[260, ["SPELLING.CHECK"]],
|
|
257
|
+
[261, ["ERROR.TYPE", 1]],
|
|
258
|
+
[262, ["APP.TITLE"]],
|
|
259
|
+
[263, ["WINDOW.TITLE"]],
|
|
260
|
+
[264, ["SAVE.TOOLBAR"]],
|
|
261
|
+
[265, ["ENABLE.TOOL", 3]],
|
|
262
|
+
[266, ["PRESS.TOOL", 3]],
|
|
263
|
+
[267, ["REGISTER.ID"]],
|
|
264
|
+
[268, ["GET.WORKBOOK"]],
|
|
265
|
+
[269, ["AVEDEV"]],
|
|
266
|
+
[270, ["BETADIST"]],
|
|
267
|
+
[271, ["GAMMALN", 1]],
|
|
268
|
+
[272, ["BETAINV"]],
|
|
269
|
+
[273, ["BINOMDIST", 4]],
|
|
270
|
+
[274, ["CHIDIST", 2]],
|
|
271
|
+
[275, ["CHIINV", 2]],
|
|
272
|
+
[276, ["COMBIN", 2]],
|
|
273
|
+
[277, ["CONFIDENCE", 3]],
|
|
274
|
+
[278, ["CRITBINOM", 3]],
|
|
275
|
+
[279, ["EVEN", 1]],
|
|
276
|
+
[280, ["EXPONDIST", 3]],
|
|
277
|
+
[281, ["FDIST", 3]],
|
|
278
|
+
[282, ["FINV", 3]],
|
|
279
|
+
[283, ["FISHER", 1]],
|
|
280
|
+
[284, ["FISHERINV", 1]],
|
|
281
|
+
[285, ["FLOOR", 2]],
|
|
282
|
+
[286, ["GAMMADIST", 4]],
|
|
283
|
+
[287, ["GAMMAINV", 3]],
|
|
284
|
+
[288, ["CEILING", 2]],
|
|
285
|
+
[289, ["HYPGEOMDIST", 4]],
|
|
286
|
+
[290, ["LOGNORMDIST", 3]],
|
|
287
|
+
[291, ["LOGINV", 3]],
|
|
288
|
+
[292, ["NEGBINOMDIST", 3]],
|
|
289
|
+
[293, ["NORMDIST", 4]],
|
|
290
|
+
[294, ["NORMSDIST", 1]],
|
|
291
|
+
[295, ["NORMINV", 3]],
|
|
292
|
+
[296, ["NORMSINV", 1]],
|
|
293
|
+
[297, ["STANDARDIZE", 3]],
|
|
294
|
+
[298, ["ODD", 1]],
|
|
295
|
+
[299, ["PERMUT", 2]],
|
|
296
|
+
[300, ["POISSON", 3]],
|
|
297
|
+
[301, ["TDIST", 3]],
|
|
298
|
+
[302, ["WEIBULL", 4]],
|
|
299
|
+
[303, ["SUMXMY2", 2]],
|
|
300
|
+
[304, ["SUMX2MY2", 2]],
|
|
301
|
+
[305, ["SUMX2PY2", 2]],
|
|
302
|
+
[306, ["CHITEST", 2]],
|
|
303
|
+
[307, ["CORREL", 2]],
|
|
304
|
+
[308, ["COVAR", 2]],
|
|
305
|
+
[309, ["FORECAST", 3]],
|
|
306
|
+
[310, ["FTEST", 2]],
|
|
307
|
+
[311, ["INTERCEPT", 2]],
|
|
308
|
+
[312, ["PEARSON", 2]],
|
|
309
|
+
[313, ["RSQ", 2]],
|
|
310
|
+
[314, ["STEYX", 2]],
|
|
311
|
+
[315, ["SLOPE", 2]],
|
|
312
|
+
[316, ["TTEST", 4]],
|
|
313
|
+
[317, ["PROB"]],
|
|
314
|
+
[318, ["DEVSQ"]],
|
|
315
|
+
[319, ["GEOMEAN"]],
|
|
316
|
+
[320, ["HARMEAN"]],
|
|
317
|
+
[321, ["SUMSQ"]],
|
|
318
|
+
[322, ["KURT"]],
|
|
319
|
+
[323, ["SKEW"]],
|
|
320
|
+
[324, ["ZTEST"]],
|
|
321
|
+
[325, ["LARGE", 2]],
|
|
322
|
+
[326, ["SMALL", 2]],
|
|
323
|
+
[327, ["QUARTILE", 2]],
|
|
324
|
+
[328, ["PERCENTILE", 2]],
|
|
325
|
+
[329, ["PERCENTRANK"]],
|
|
326
|
+
[330, ["MODE"]],
|
|
327
|
+
[331, ["TRIMMEAN", 2]],
|
|
328
|
+
[332, ["TINV", 2]],
|
|
329
|
+
[334, ["MOVIE.COMMAND"]],
|
|
330
|
+
[335, ["GET.MOVIE"]],
|
|
331
|
+
[336, ["CONCATENATE"]],
|
|
332
|
+
[337, ["POWER", 2]],
|
|
333
|
+
[338, ["PIVOT.ADD.DATA"]],
|
|
334
|
+
[339, ["GET.PIVOT.TABLE"]],
|
|
335
|
+
[340, ["GET.PIVOT.FIELD"]],
|
|
336
|
+
[341, ["GET.PIVOT.ITEM"]],
|
|
337
|
+
[342, ["RADIANS", 1]],
|
|
338
|
+
[343, ["DEGREES", 1]],
|
|
339
|
+
[344, ["SUBTOTAL"]],
|
|
340
|
+
[345, ["SUMIF"]],
|
|
341
|
+
[346, ["COUNTIF", 2]],
|
|
342
|
+
[347, ["COUNTBLANK", 1]],
|
|
343
|
+
[348, ["SCENARIO.GET"]],
|
|
344
|
+
[349, ["OPTIONS.LISTS.GET", 1]],
|
|
345
|
+
[350, ["ISPMT", 4]],
|
|
346
|
+
[351, ["DATEDIF", 3]],
|
|
347
|
+
[352, ["DATESTRING", 1]],
|
|
348
|
+
[353, ["NUMBERSTRING", 2]],
|
|
349
|
+
[354, ["ROMAN"]],
|
|
350
|
+
[355, ["OPEN.DIALOG"]],
|
|
351
|
+
[356, ["SAVE.DIALOG"]],
|
|
352
|
+
[357, ["VIEW.GET"]],
|
|
353
|
+
[358, ["GETPIVOTDATA"]],
|
|
354
|
+
[359, ["HYPERLINK"]],
|
|
355
|
+
[360, ["PHONETIC", 1]],
|
|
356
|
+
[361, ["AVERAGEA"]],
|
|
357
|
+
[362, ["MAXA"]],
|
|
358
|
+
[363, ["MINA"]],
|
|
359
|
+
[364, ["STDEVPA"]],
|
|
360
|
+
[365, ["VARPA"]],
|
|
361
|
+
[366, ["STDEVA"]],
|
|
362
|
+
[367, ["VARA"]],
|
|
363
|
+
[368, ["BAHTTEXT", 1]],
|
|
364
|
+
[369, ["THAIDAYOFWEEK", 1]],
|
|
365
|
+
[370, ["THAIDIGIT", 1]],
|
|
366
|
+
[371, ["THAIMONTHOFYEAR", 1]],
|
|
367
|
+
[372, ["THAINUMSOUND", 1]],
|
|
368
|
+
[373, ["THAINUMSTRING", 1]],
|
|
369
|
+
[374, ["THAISTRINGLENGTH", 1]],
|
|
370
|
+
[375, ["ISTHAIDIGIT", 1]],
|
|
371
|
+
[376, ["ROUNDBAHTDOWN", 1]],
|
|
372
|
+
[377, ["ROUNDBAHTUP", 1]],
|
|
373
|
+
[378, ["THAIYEAR", 1]],
|
|
374
|
+
[379, ["RTD"]]
|
|
375
|
+
];
|
|
376
|
+
/** A function's displayed name, by its Ftab index -- consulted for both PtgFunc and PtgFuncVar. */
|
|
377
|
+
const FTAB_NAMES = new Map(FTAB_ENTRIES.map(([iftab, [name]]) => [iftab, name]));
|
|
378
|
+
/** A function's fixed argument count, by its Ftab index -- consulted only for PtgFunc, whose own token carries no count. Absent for every entry [MS-XLS]'s grammar gives an optional or repeated argument, which is never resolved through PtgFunc in practice (see the module comment). */
|
|
379
|
+
const FTAB_FIXED_ARITY = new Map(FTAB_ENTRIES.filter((entry) => entry[1][1] !== void 0).map(([iftab, [, arity]]) => [iftab, arity]));
|
|
380
|
+
//#endregion
|
|
381
|
+
export { FTAB_FIXED_ARITY, FTAB_NAMES };
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_biff_cursor = require("./cursor.cjs");
|
|
3
|
+
const require_biff_strings = require("./strings.cjs");
|
|
4
|
+
const require_biff_errors = require("./errors.cjs");
|
|
5
|
+
const require_biff_ptg_functions = require("./ptg-functions.cjs");
|
|
6
|
+
let document_schema_js = require("document-schema.js");
|
|
7
|
+
//#region src/biff/ptg.ts
|
|
8
|
+
const PRECEDENCE_COMPARISON = 1;
|
|
9
|
+
const PRECEDENCE_CONCAT = 2;
|
|
10
|
+
const PRECEDENCE_ADD_SUB = 3;
|
|
11
|
+
const PRECEDENCE_MUL_DIV = 4;
|
|
12
|
+
const PRECEDENCE_POWER = 5;
|
|
13
|
+
const PRECEDENCE_PERCENT = 6;
|
|
14
|
+
const PRECEDENCE_UNARY = 7;
|
|
15
|
+
const PRECEDENCE_ATOMIC = 8;
|
|
16
|
+
function pushAtomic(stack, text) {
|
|
17
|
+
stack.push({
|
|
18
|
+
text,
|
|
19
|
+
precedence: PRECEDENCE_ATOMIC
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function wrapBelow(operand, minimum) {
|
|
23
|
+
return operand.precedence < minimum ? `(${operand.text})` : operand.text;
|
|
24
|
+
}
|
|
25
|
+
function wrapAtOrBelow(operand, minimum) {
|
|
26
|
+
return operand.precedence <= minimum ? `(${operand.text})` : operand.text;
|
|
27
|
+
}
|
|
28
|
+
/** Pops two operands and pushes their combination -- the left wrapped only if its own precedence is strictly lower than this operator's, the right wrapped if its precedence is lower than or equal to it (see the module comment for why the same rule is correct for every operator here). Returns false, changing nothing, when fewer than two operands are on the stack -- a malformed token stream this reader declines to guess at rather than reading past. */
|
|
29
|
+
function applyBinary(stack, symbol, precedence) {
|
|
30
|
+
const right = stack.pop();
|
|
31
|
+
const left = stack.pop();
|
|
32
|
+
if (left === void 0 || right === void 0) return false;
|
|
33
|
+
stack.push({
|
|
34
|
+
text: `${wrapBelow(left, precedence)}${symbol}${wrapAtOrBelow(right, precedence)}`,
|
|
35
|
+
precedence
|
|
36
|
+
});
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
function applyPrefix(stack, symbol) {
|
|
40
|
+
const operand = stack.pop();
|
|
41
|
+
if (operand === void 0) return false;
|
|
42
|
+
stack.push({
|
|
43
|
+
text: `${symbol}${wrapBelow(operand, PRECEDENCE_UNARY)}`,
|
|
44
|
+
precedence: PRECEDENCE_UNARY
|
|
45
|
+
});
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
function applyPercent(stack) {
|
|
49
|
+
const operand = stack.pop();
|
|
50
|
+
if (operand === void 0) return false;
|
|
51
|
+
stack.push({
|
|
52
|
+
text: `${wrapBelow(operand, PRECEDENCE_PERCENT)}%`,
|
|
53
|
+
precedence: PRECEDENCE_PERCENT
|
|
54
|
+
});
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
/** PtgParen ([MS-XLS] 2.5.198.80): a pure display token restating parentheses the formula's own author typed, regardless of whether the grouping they express is otherwise necessary. Wrapped unconditionally rather than through precedence comparison, since the point is to reproduce exactly what was there, not to decide afresh whether it was needed. */
|
|
58
|
+
function applyParen(stack) {
|
|
59
|
+
const operand = stack.pop();
|
|
60
|
+
if (operand === void 0) return false;
|
|
61
|
+
stack.push({
|
|
62
|
+
text: `(${operand.text})`,
|
|
63
|
+
precedence: PRECEDENCE_ATOMIC
|
|
64
|
+
});
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
/** Pops exactly `arity` operands (in argument order) and pushes `name(arg1,arg2,...)`. A function call's own arguments never need wrapping regardless of what built them -- the parentheses already bound them unambiguously -- so every argument is taken as its bare text. */
|
|
68
|
+
function applyFunctionCall(stack, name, arity) {
|
|
69
|
+
if (stack.length < arity) return false;
|
|
70
|
+
const args = stack.splice(stack.length - arity, arity);
|
|
71
|
+
stack.push({
|
|
72
|
+
text: `${name}(${args.map((operand) => operand.text).join(",")})`,
|
|
73
|
+
precedence: PRECEDENCE_ATOMIC
|
|
74
|
+
});
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
/** PtgAttrSum ([MS-XLS] 2.5.198.41): the optimisation a real producer emits in place of a PtgFuncVar call to SUM with a single reference-class argument, wrapping whatever is already on top of the stack. */
|
|
78
|
+
function applySum(stack) {
|
|
79
|
+
return applyFunctionCall(stack, "SUM", 1);
|
|
80
|
+
}
|
|
81
|
+
function quoteStringLiteral(value) {
|
|
82
|
+
return `"${value.replaceAll("\"", "\"\"")}"`;
|
|
83
|
+
}
|
|
84
|
+
const COLUMN_INDEX_MASK = 16383;
|
|
85
|
+
const COLUMN_RELATIVE_BIT = 16384;
|
|
86
|
+
const ROW_RELATIVE_BIT = 32768;
|
|
87
|
+
function pointFrom(row, columnField) {
|
|
88
|
+
return {
|
|
89
|
+
row,
|
|
90
|
+
column: columnField & COLUMN_INDEX_MASK,
|
|
91
|
+
columnAbsolute: (columnField & COLUMN_RELATIVE_BIT) === 0,
|
|
92
|
+
rowAbsolute: (columnField & ROW_RELATIVE_BIT) === 0
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function formatPoint(point) {
|
|
96
|
+
return `${`${point.columnAbsolute ? "$" : ""}${(0, document_schema_js.columnIndexToLetters)(point.column)}`}${`${point.rowAbsolute ? "$" : ""}${point.row + 1}`}`;
|
|
97
|
+
}
|
|
98
|
+
/** RgceLoc ([MS-XLS] 2.5.198.109): a single cell reference, as PtgRef/PtgRef3d carry it -- a plain row then a ColRelU column field. */
|
|
99
|
+
function readLoc(cursor) {
|
|
100
|
+
return pointFrom(cursor.u16(), cursor.u16());
|
|
101
|
+
}
|
|
102
|
+
/** RgceArea ([MS-XLS] 2.5.198.105): a rectangular range, as PtgArea/PtgArea3d carry it -- both row bounds, then both corners' own ColRelU column fields. */
|
|
103
|
+
function readArea(cursor) {
|
|
104
|
+
const rowFirst = cursor.u16();
|
|
105
|
+
const rowLast = cursor.u16();
|
|
106
|
+
const columnFirstField = cursor.u16();
|
|
107
|
+
const columnLastField = cursor.u16();
|
|
108
|
+
return [pointFrom(rowFirst, columnFirstField), pointFrom(rowLast, columnLastField)];
|
|
109
|
+
}
|
|
110
|
+
const SIMPLE_SHEET_NAME_RE = /^[A-Za-z_][A-Za-z0-9_.]*$/;
|
|
111
|
+
function quoteSheetLabel(label) {
|
|
112
|
+
return SIMPLE_SHEET_NAME_RE.test(label) ? label : `'${label.replaceAll("'", "''")}'`;
|
|
113
|
+
}
|
|
114
|
+
/** The `'Sheet'!` or `'First:Last'!` prefix a 3D reference's own ixti resolves to, or undefined when this reader does not resolve it (see WorkbookGlobals.sheetRanges) -- an unresolved ixti aborts the whole formula's parse, the same as any other unsupported token. */
|
|
115
|
+
function resolveSheetLabel(ixti, context) {
|
|
116
|
+
const range = context.sheetRanges[ixti];
|
|
117
|
+
if (range === void 0) return;
|
|
118
|
+
const first = context.sheets[range.firstSheetIndex]?.name;
|
|
119
|
+
const last = context.sheets[range.lastSheetIndex]?.name;
|
|
120
|
+
if (first === void 0 || last === void 0) return;
|
|
121
|
+
return `${quoteSheetLabel(range.firstSheetIndex === range.lastSheetIndex ? first : `${first}:${last}`)}!`;
|
|
122
|
+
}
|
|
123
|
+
const PTG_ADD = 3;
|
|
124
|
+
const PTG_SUB = 4;
|
|
125
|
+
const PTG_MUL = 5;
|
|
126
|
+
const PTG_DIV = 6;
|
|
127
|
+
const PTG_POWER = 7;
|
|
128
|
+
const PTG_CONCAT = 8;
|
|
129
|
+
const PTG_LT = 9;
|
|
130
|
+
const PTG_LE = 10;
|
|
131
|
+
const PTG_EQ = 11;
|
|
132
|
+
const PTG_GE = 12;
|
|
133
|
+
const PTG_GT = 13;
|
|
134
|
+
const PTG_NE = 14;
|
|
135
|
+
const PTG_UPLUS = 18;
|
|
136
|
+
const PTG_UMINUS = 19;
|
|
137
|
+
const PTG_PERCENT = 20;
|
|
138
|
+
const PTG_PAREN = 21;
|
|
139
|
+
const PTG_MISSARG = 22;
|
|
140
|
+
const PTG_STR = 23;
|
|
141
|
+
const PTG_ERR = 28;
|
|
142
|
+
const PTG_BOOL = 29;
|
|
143
|
+
const PTG_INT = 30;
|
|
144
|
+
const PTG_NUM = 31;
|
|
145
|
+
const PTG_FUNC_REF = 33;
|
|
146
|
+
const PTG_FUNC_VALUE = 65;
|
|
147
|
+
const PTG_FUNC_ARRAY = 97;
|
|
148
|
+
const PTG_FUNCVAR_REF = 34;
|
|
149
|
+
const PTG_FUNCVAR_VALUE = 66;
|
|
150
|
+
const PTG_FUNCVAR_ARRAY = 98;
|
|
151
|
+
const PTG_REF_REF = 36;
|
|
152
|
+
const PTG_REF_VALUE = 68;
|
|
153
|
+
const PTG_REF_ARRAY = 100;
|
|
154
|
+
const PTG_AREA_REF = 37;
|
|
155
|
+
const PTG_AREA_VALUE = 69;
|
|
156
|
+
const PTG_AREA_ARRAY = 101;
|
|
157
|
+
const PTG_REF3D_REF = 58;
|
|
158
|
+
const PTG_REF3D_VALUE = 90;
|
|
159
|
+
const PTG_REF3D_ARRAY = 122;
|
|
160
|
+
const PTG_AREA3D_REF = 59;
|
|
161
|
+
const PTG_AREA3D_VALUE = 91;
|
|
162
|
+
const PTG_AREA3D_ARRAY = 123;
|
|
163
|
+
const PTG_ATTR_OPCODE = 25;
|
|
164
|
+
const PTG_ATTR_SEMI = 1;
|
|
165
|
+
const PTG_ATTR_IF = 2;
|
|
166
|
+
const PTG_ATTR_CHOOSE = 4;
|
|
167
|
+
const PTG_ATTR_GOTO = 8;
|
|
168
|
+
const PTG_ATTR_SUM = 16;
|
|
169
|
+
const PTG_ATTR_BAXCEL_A = 32;
|
|
170
|
+
const PTG_ATTR_BAXCEL_B = 33;
|
|
171
|
+
const PTG_ATTR_SPACE = 64;
|
|
172
|
+
const PTG_ATTR_SPACE_SEMI = 65;
|
|
173
|
+
/** The four bytes every PtgAttr subtype but PtgAttrChoose occupies: the shared opcode, the subtype flag byte (already consumed by the caller), and two more this module never inspects. */
|
|
174
|
+
const PTG_ATTR_TRAILING_BYTES = 2;
|
|
175
|
+
/**
|
|
176
|
+
* Parses a Formula record's compiled expression into the text a spreadsheet application would show, or returns undefined for a token this reader does not resolve -- a shared formula's PtgExp, an array constant's PtgArray, a defined name, a natural-language reference, or a 3D reference into a genuinely external workbook (see the module comment for the full list). The caller leaves ContentSheetCell.formula absent in that case, exactly as for any other unsupported construct.
|
|
177
|
+
*
|
|
178
|
+
* `rgce` is the formula's own token bytes, already sliced to their declared length (CellParsedFormula.cce) by the caller -- this function reads exactly that many bytes and nothing past them.
|
|
179
|
+
*/
|
|
180
|
+
function parseFormulaText(rgce, context) {
|
|
181
|
+
const cursor = new require_biff_cursor.BlockCursor([rgce]);
|
|
182
|
+
const stack = [];
|
|
183
|
+
while (cursor.remainingInBlock() > 0) switch (cursor.u8()) {
|
|
184
|
+
case PTG_ADD:
|
|
185
|
+
if (!applyBinary(stack, "+", PRECEDENCE_ADD_SUB)) return void 0;
|
|
186
|
+
break;
|
|
187
|
+
case PTG_SUB:
|
|
188
|
+
if (!applyBinary(stack, "-", PRECEDENCE_ADD_SUB)) return void 0;
|
|
189
|
+
break;
|
|
190
|
+
case PTG_MUL:
|
|
191
|
+
if (!applyBinary(stack, "*", PRECEDENCE_MUL_DIV)) return void 0;
|
|
192
|
+
break;
|
|
193
|
+
case PTG_DIV:
|
|
194
|
+
if (!applyBinary(stack, "/", PRECEDENCE_MUL_DIV)) return void 0;
|
|
195
|
+
break;
|
|
196
|
+
case PTG_POWER:
|
|
197
|
+
if (!applyBinary(stack, "^", PRECEDENCE_POWER)) return void 0;
|
|
198
|
+
break;
|
|
199
|
+
case PTG_CONCAT:
|
|
200
|
+
if (!applyBinary(stack, "&", PRECEDENCE_CONCAT)) return void 0;
|
|
201
|
+
break;
|
|
202
|
+
case PTG_LT:
|
|
203
|
+
if (!applyBinary(stack, "<", PRECEDENCE_COMPARISON)) return void 0;
|
|
204
|
+
break;
|
|
205
|
+
case PTG_LE:
|
|
206
|
+
if (!applyBinary(stack, "<=", PRECEDENCE_COMPARISON)) return void 0;
|
|
207
|
+
break;
|
|
208
|
+
case PTG_EQ:
|
|
209
|
+
if (!applyBinary(stack, "=", PRECEDENCE_COMPARISON)) return void 0;
|
|
210
|
+
break;
|
|
211
|
+
case PTG_GE:
|
|
212
|
+
if (!applyBinary(stack, ">=", PRECEDENCE_COMPARISON)) return void 0;
|
|
213
|
+
break;
|
|
214
|
+
case PTG_GT:
|
|
215
|
+
if (!applyBinary(stack, ">", PRECEDENCE_COMPARISON)) return void 0;
|
|
216
|
+
break;
|
|
217
|
+
case PTG_NE:
|
|
218
|
+
if (!applyBinary(stack, "<>", PRECEDENCE_COMPARISON)) return void 0;
|
|
219
|
+
break;
|
|
220
|
+
case PTG_UPLUS:
|
|
221
|
+
if (!applyPrefix(stack, "+")) return void 0;
|
|
222
|
+
break;
|
|
223
|
+
case PTG_UMINUS:
|
|
224
|
+
if (!applyPrefix(stack, "-")) return void 0;
|
|
225
|
+
break;
|
|
226
|
+
case PTG_PERCENT:
|
|
227
|
+
if (!applyPercent(stack)) return void 0;
|
|
228
|
+
break;
|
|
229
|
+
case PTG_PAREN:
|
|
230
|
+
if (!applyParen(stack)) return void 0;
|
|
231
|
+
break;
|
|
232
|
+
case PTG_MISSARG:
|
|
233
|
+
pushAtomic(stack, "");
|
|
234
|
+
break;
|
|
235
|
+
case PTG_STR:
|
|
236
|
+
pushAtomic(stack, quoteStringLiteral(require_biff_strings.readShortXLUnicodeString(cursor)));
|
|
237
|
+
break;
|
|
238
|
+
case PTG_ERR: {
|
|
239
|
+
const text = require_biff_errors.errorTextOf(cursor.u8());
|
|
240
|
+
if (text === void 0) return void 0;
|
|
241
|
+
pushAtomic(stack, text);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case PTG_BOOL:
|
|
245
|
+
pushAtomic(stack, cursor.u8() !== 0 ? "TRUE" : "FALSE");
|
|
246
|
+
break;
|
|
247
|
+
case PTG_INT:
|
|
248
|
+
pushAtomic(stack, String(cursor.u16()));
|
|
249
|
+
break;
|
|
250
|
+
case PTG_NUM:
|
|
251
|
+
pushAtomic(stack, String(cursor.f64()));
|
|
252
|
+
break;
|
|
253
|
+
case PTG_REF_REF:
|
|
254
|
+
case PTG_REF_VALUE:
|
|
255
|
+
case PTG_REF_ARRAY:
|
|
256
|
+
pushAtomic(stack, formatPoint(readLoc(cursor)));
|
|
257
|
+
break;
|
|
258
|
+
case PTG_AREA_REF:
|
|
259
|
+
case PTG_AREA_VALUE:
|
|
260
|
+
case PTG_AREA_ARRAY: {
|
|
261
|
+
const [start, end] = readArea(cursor);
|
|
262
|
+
pushAtomic(stack, `${formatPoint(start)}:${formatPoint(end)}`);
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
case PTG_REF3D_REF:
|
|
266
|
+
case PTG_REF3D_VALUE:
|
|
267
|
+
case PTG_REF3D_ARRAY: {
|
|
268
|
+
const ixti = cursor.u16();
|
|
269
|
+
const point = readLoc(cursor);
|
|
270
|
+
const label = resolveSheetLabel(ixti, context);
|
|
271
|
+
if (label === void 0) return void 0;
|
|
272
|
+
pushAtomic(stack, `${label}${formatPoint(point)}`);
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case PTG_AREA3D_REF:
|
|
276
|
+
case PTG_AREA3D_VALUE:
|
|
277
|
+
case PTG_AREA3D_ARRAY: {
|
|
278
|
+
const ixti = cursor.u16();
|
|
279
|
+
const [start, end] = readArea(cursor);
|
|
280
|
+
const label = resolveSheetLabel(ixti, context);
|
|
281
|
+
if (label === void 0) return void 0;
|
|
282
|
+
pushAtomic(stack, `${label}${formatPoint(start)}:${formatPoint(end)}`);
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
case PTG_FUNC_REF:
|
|
286
|
+
case PTG_FUNC_VALUE:
|
|
287
|
+
case PTG_FUNC_ARRAY: {
|
|
288
|
+
const iftab = cursor.u16();
|
|
289
|
+
const name = require_biff_ptg_functions.FTAB_NAMES.get(iftab);
|
|
290
|
+
const arity = require_biff_ptg_functions.FTAB_FIXED_ARITY.get(iftab);
|
|
291
|
+
if (name === void 0 || arity === void 0) return void 0;
|
|
292
|
+
if (!applyFunctionCall(stack, name, arity)) return void 0;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
case PTG_FUNCVAR_REF:
|
|
296
|
+
case PTG_FUNCVAR_VALUE:
|
|
297
|
+
case PTG_FUNCVAR_ARRAY: {
|
|
298
|
+
const cparams = cursor.u8();
|
|
299
|
+
const iftab = cursor.u16();
|
|
300
|
+
const name = require_biff_ptg_functions.FTAB_NAMES.get(iftab);
|
|
301
|
+
if (name === void 0) return void 0;
|
|
302
|
+
if (!applyFunctionCall(stack, name, cparams)) return void 0;
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case PTG_ATTR_OPCODE: {
|
|
306
|
+
const subtype = cursor.u8();
|
|
307
|
+
if (subtype === PTG_ATTR_CHOOSE) return;
|
|
308
|
+
cursor.skip(PTG_ATTR_TRAILING_BYTES);
|
|
309
|
+
if (subtype === PTG_ATTR_SUM) {
|
|
310
|
+
if (!applySum(stack)) return void 0;
|
|
311
|
+
} else if (subtype !== PTG_ATTR_SEMI && subtype !== PTG_ATTR_IF && subtype !== PTG_ATTR_GOTO && subtype !== PTG_ATTR_BAXCEL_A && subtype !== PTG_ATTR_BAXCEL_B && subtype !== PTG_ATTR_SPACE && subtype !== PTG_ATTR_SPACE_SEMI) return;
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
default: return;
|
|
315
|
+
}
|
|
316
|
+
return stack.length === 1 ? stack[0]?.text : void 0;
|
|
317
|
+
}
|
|
318
|
+
//#endregion
|
|
319
|
+
exports.parseFormulaText = parseFormulaText;
|