@simplysm/excel 14.0.100 → 14.0.101

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.
Files changed (184) hide show
  1. package/dist/biff/biff-model-factory.d.ts +32 -0
  2. package/dist/biff/biff-model-factory.d.ts.map +1 -0
  3. package/dist/biff/biff-model-factory.js +88 -0
  4. package/dist/biff/biff-model-factory.js.map +1 -0
  5. package/dist/biff/biff-ptg.d.ts +14 -0
  6. package/dist/biff/biff-ptg.d.ts.map +1 -0
  7. package/dist/biff/biff-ptg.js +277 -0
  8. package/dist/biff/biff-ptg.js.map +1 -0
  9. package/dist/biff/biff-records.d.ts +163 -0
  10. package/dist/biff/biff-records.d.ts.map +1 -0
  11. package/dist/biff/biff-records.js +579 -0
  12. package/dist/biff/biff-records.js.map +1 -0
  13. package/dist/biff/biff-shared-string-model.d.ts +13 -0
  14. package/dist/biff/biff-shared-string-model.d.ts.map +1 -0
  15. package/dist/biff/biff-shared-string-model.js +41 -0
  16. package/dist/biff/biff-shared-string-model.js.map +1 -0
  17. package/dist/biff/biff-style-model.d.ts +39 -0
  18. package/dist/biff/biff-style-model.d.ts.map +1 -0
  19. package/dist/biff/biff-style-model.js +182 -0
  20. package/dist/biff/biff-style-model.js.map +1 -0
  21. package/dist/biff/biff-workbook-model.d.ts +17 -0
  22. package/dist/biff/biff-workbook-model.d.ts.map +1 -0
  23. package/dist/biff/biff-workbook-model.js +64 -0
  24. package/dist/biff/biff-workbook-model.js.map +1 -0
  25. package/dist/biff/biff-worksheet-model.d.ts +69 -0
  26. package/dist/biff/biff-worksheet-model.d.ts.map +1 -0
  27. package/dist/biff/biff-worksheet-model.js +495 -0
  28. package/dist/biff/biff-worksheet-model.js.map +1 -0
  29. package/dist/biff/biff12-codec.d.ts +149 -0
  30. package/dist/biff/biff12-codec.d.ts.map +1 -0
  31. package/dist/biff/biff12-codec.js +262 -0
  32. package/dist/biff/biff12-codec.js.map +1 -0
  33. package/dist/excel-cell.d.ts +0 -6
  34. package/dist/excel-cell.d.ts.map +1 -1
  35. package/dist/excel-cell.js +2 -24
  36. package/dist/excel-cell.js.map +1 -1
  37. package/dist/excel-col.js.map +1 -1
  38. package/dist/excel-row.js.map +1 -1
  39. package/dist/excel-workbook.d.ts +4 -21
  40. package/dist/excel-workbook.d.ts.map +1 -1
  41. package/dist/excel-workbook.js +16 -49
  42. package/dist/excel-workbook.js.map +1 -1
  43. package/dist/excel-worksheet.d.ts +0 -11
  44. package/dist/excel-worksheet.d.ts.map +1 -1
  45. package/dist/excel-worksheet.js +9 -46
  46. package/dist/excel-worksheet.js.map +1 -1
  47. package/dist/excel-wrapper.d.ts +0 -10
  48. package/dist/excel-wrapper.d.ts.map +1 -1
  49. package/dist/excel-wrapper.js +0 -10
  50. package/dist/excel-wrapper.js.map +1 -1
  51. package/dist/models/excel-format.d.ts +3 -0
  52. package/dist/models/excel-format.d.ts.map +1 -0
  53. package/dist/models/excel-format.js +2 -0
  54. package/dist/models/excel-format.js.map +1 -0
  55. package/dist/models/excel-model-factory.d.ts +33 -0
  56. package/dist/models/excel-model-factory.d.ts.map +1 -0
  57. package/dist/models/excel-model-factory.js +2 -0
  58. package/dist/models/excel-model-factory.js.map +1 -0
  59. package/dist/models/excel-model.d.ts +12 -0
  60. package/dist/models/excel-model.d.ts.map +1 -0
  61. package/dist/models/excel-model.js +2 -0
  62. package/dist/models/excel-model.js.map +1 -0
  63. package/dist/models/i-content-type-model.d.ts +7 -0
  64. package/dist/models/i-content-type-model.d.ts.map +1 -0
  65. package/dist/models/i-content-type-model.js +2 -0
  66. package/dist/models/i-content-type-model.js.map +1 -0
  67. package/dist/models/i-drawing-model.d.ts +23 -0
  68. package/dist/models/i-drawing-model.d.ts.map +1 -0
  69. package/dist/models/i-drawing-model.js +2 -0
  70. package/dist/models/i-drawing-model.js.map +1 -0
  71. package/dist/models/i-relationship-model.d.ts +16 -0
  72. package/dist/models/i-relationship-model.d.ts.map +1 -0
  73. package/dist/models/i-relationship-model.js +2 -0
  74. package/dist/models/i-relationship-model.js.map +1 -0
  75. package/dist/models/i-shared-string-model.d.ts +9 -0
  76. package/dist/models/i-shared-string-model.d.ts.map +1 -0
  77. package/dist/models/i-shared-string-model.js +2 -0
  78. package/dist/models/i-shared-string-model.js.map +1 -0
  79. package/dist/models/i-style-model.d.ts +18 -0
  80. package/dist/models/i-style-model.d.ts.map +1 -0
  81. package/dist/models/i-style-model.js +2 -0
  82. package/dist/models/i-style-model.js.map +1 -0
  83. package/dist/models/i-workbook-model.d.ts +17 -0
  84. package/dist/models/i-workbook-model.d.ts.map +1 -0
  85. package/dist/models/i-workbook-model.js +2 -0
  86. package/dist/models/i-workbook-model.js.map +1 -0
  87. package/dist/models/i-worksheet-model.d.ts +39 -0
  88. package/dist/models/i-worksheet-model.d.ts.map +1 -0
  89. package/dist/models/i-worksheet-model.js +2 -0
  90. package/dist/models/i-worksheet-model.js.map +1 -0
  91. package/dist/models/shared/excel-cf-spec.d.ts +13 -0
  92. package/dist/models/shared/excel-cf-spec.d.ts.map +1 -0
  93. package/dist/models/shared/excel-cf-spec.js +2 -0
  94. package/dist/models/shared/excel-cf-spec.js.map +1 -0
  95. package/dist/models/shared/excel-style.d.ts +24 -0
  96. package/dist/models/shared/excel-style.d.ts.map +1 -0
  97. package/dist/models/shared/excel-style.js +38 -0
  98. package/dist/models/shared/excel-style.js.map +1 -0
  99. package/dist/types.d.ts +0 -13
  100. package/dist/types.d.ts.map +1 -1
  101. package/dist/types.js.map +1 -1
  102. package/dist/utils/excel-style-data.d.ts +3 -5
  103. package/dist/utils/excel-style-data.d.ts.map +1 -1
  104. package/dist/utils/excel-style-data.js +2 -16
  105. package/dist/utils/excel-style-data.js.map +1 -1
  106. package/dist/utils/zip-cache.d.ts +46 -9
  107. package/dist/utils/zip-cache.d.ts.map +1 -1
  108. package/dist/utils/zip-cache.js +138 -52
  109. package/dist/utils/zip-cache.js.map +1 -1
  110. package/dist/xml/excel-xml-content-type.d.ts +8 -4
  111. package/dist/xml/excel-xml-content-type.d.ts.map +1 -1
  112. package/dist/xml/excel-xml-content-type.js +13 -6
  113. package/dist/xml/excel-xml-content-type.js.map +1 -1
  114. package/dist/xml/excel-xml-drawing.d.ts +8 -4
  115. package/dist/xml/excel-xml-drawing.d.ts.map +1 -1
  116. package/dist/xml/excel-xml-drawing.js +14 -7
  117. package/dist/xml/excel-xml-drawing.js.map +1 -1
  118. package/dist/xml/excel-xml-relationship.d.ts +12 -4
  119. package/dist/xml/excel-xml-relationship.d.ts.map +1 -1
  120. package/dist/xml/excel-xml-relationship.js +22 -12
  121. package/dist/xml/excel-xml-relationship.js.map +1 -1
  122. package/dist/xml/excel-xml-shared-string.d.ts +8 -4
  123. package/dist/xml/excel-xml-shared-string.d.ts.map +1 -1
  124. package/dist/xml/excel-xml-shared-string.js +16 -9
  125. package/dist/xml/excel-xml-shared-string.js.map +1 -1
  126. package/dist/xml/excel-xml-style.d.ts +11 -22
  127. package/dist/xml/excel-xml-style.d.ts.map +1 -1
  128. package/dist/xml/excel-xml-style.js +66 -92
  129. package/dist/xml/excel-xml-style.js.map +1 -1
  130. package/dist/xml/excel-xml-unknown.d.ts +6 -5
  131. package/dist/xml/excel-xml-unknown.d.ts.map +1 -1
  132. package/dist/xml/excel-xml-unknown.js +7 -4
  133. package/dist/xml/excel-xml-unknown.js.map +1 -1
  134. package/dist/xml/excel-xml-workbook.d.ts +9 -4
  135. package/dist/xml/excel-xml-workbook.d.ts.map +1 -1
  136. package/dist/xml/excel-xml-workbook.js +28 -20
  137. package/dist/xml/excel-xml-workbook.js.map +1 -1
  138. package/dist/xml/excel-xml-worksheet.d.ts +12 -7
  139. package/dist/xml/excel-xml-worksheet.d.ts.map +1 -1
  140. package/dist/xml/excel-xml-worksheet.js +65 -50
  141. package/dist/xml/excel-xml-worksheet.js.map +1 -1
  142. package/dist/xml/xml-model-factory.d.ts +25 -0
  143. package/dist/xml/xml-model-factory.d.ts.map +1 -0
  144. package/dist/xml/xml-model-factory.js +66 -0
  145. package/dist/xml/xml-model-factory.js.map +1 -0
  146. package/package.json +2 -2
  147. package/src/biff/biff-model-factory.ts +101 -0
  148. package/src/biff/biff-ptg.ts +289 -0
  149. package/src/biff/biff-records.ts +686 -0
  150. package/src/biff/biff-shared-string-model.ts +52 -0
  151. package/src/biff/biff-style-model.ts +219 -0
  152. package/src/biff/biff-workbook-model.ts +83 -0
  153. package/src/biff/biff-worksheet-model.ts +545 -0
  154. package/src/biff/biff12-codec.ts +286 -0
  155. package/src/excel-cell.ts +12 -46
  156. package/src/excel-col.ts +3 -3
  157. package/src/excel-row.ts +3 -3
  158. package/src/excel-workbook.ts +26 -69
  159. package/src/excel-worksheet.ts +36 -107
  160. package/src/excel-wrapper.ts +0 -10
  161. package/src/models/excel-format.ts +2 -0
  162. package/src/models/excel-model-factory.ts +33 -0
  163. package/src/models/excel-model.ts +12 -0
  164. package/src/models/i-content-type-model.ts +7 -0
  165. package/src/models/i-drawing-model.ts +13 -0
  166. package/src/models/i-relationship-model.ts +13 -0
  167. package/src/models/i-shared-string-model.ts +9 -0
  168. package/src/models/i-style-model.ts +18 -0
  169. package/src/models/i-workbook-model.ts +17 -0
  170. package/src/models/i-worksheet-model.ts +40 -0
  171. package/src/models/shared/excel-cf-spec.ts +24 -0
  172. package/src/models/shared/excel-style.ts +65 -0
  173. package/src/types.ts +0 -13
  174. package/src/utils/excel-style-data.ts +4 -25
  175. package/src/utils/zip-cache.ts +189 -58
  176. package/src/xml/excel-xml-content-type.ts +18 -8
  177. package/src/xml/excel-xml-drawing.ts +19 -9
  178. package/src/xml/excel-xml-relationship.ts +28 -14
  179. package/src/xml/excel-xml-shared-string.ts +20 -11
  180. package/src/xml/excel-xml-style.ts +74 -116
  181. package/src/xml/excel-xml-unknown.ts +8 -4
  182. package/src/xml/excel-xml-workbook.ts +34 -22
  183. package/src/xml/excel-xml-worksheet.ts +73 -53
  184. package/src/xml/xml-model-factory.ts +83 -0
@@ -0,0 +1,495 @@
1
+ import { ExcelUtils } from "../utils/excel-utils.js";
2
+ import { concatBytes, readAllRecords, readUint32LE, readXLWideString, REC } from "./biff12-codec.js";
3
+ import { decodeFormula, encodeFormula } from "./biff-ptg.js";
4
+ import { decodeBiffCell, encodeBeginCount, encodeBrtBeginAFilter, encodeBrtBeginCFRule, encodeBrtBeginConditionalFormatting, encodeBrtBeginWsView, encodeBrtCellBool, encodeBrtCellIsst, encodeBrtCellReal, encodeBrtCellSt, encodeBrtColInfo, encodeBrtDrawing, encodeBrtFmlaNum, encodeBrtMergeCell, encodeBrtPane, encodeBrtRowHdr, encodeBrtSel, encodeBrtSheetFormatPr, encodeBrtWsDim, encodeBrtWsProp, encodeMarker, } from "./biff-records.js";
5
+ const HEX = (n) => n.toString(16).padStart(2, "0").toUpperCase();
6
+ /** CFOper(iParam) → cellIs operator. ([MS-XLSB] 2.5.15) */
7
+ const CF_OPER_REV = {
8
+ 1: "between",
9
+ 2: "notBetween",
10
+ 3: "equal",
11
+ 4: "notEqual",
12
+ 5: "greaterThan",
13
+ 6: "lessThan",
14
+ 7: "greaterThanOrEqual",
15
+ 8: "lessThanOrEqual",
16
+ };
17
+ /** CFTextOper(iParam) → text rule type/operator. ([MS-XLSB] 2.5.17) */
18
+ const CF_TEXTOPER_REV = {
19
+ 0: { type: "containsText", operator: "containsText" },
20
+ 1: { type: "notContainsText", operator: "notContains" },
21
+ 2: { type: "beginsWith", operator: "beginsWith" },
22
+ 3: { type: "endsWith", operator: "endsWith" },
23
+ };
24
+ /** worksheets/sheetN.bin (BIFF12) 읽기 모델. 셀 값/타입/범위 조회. */
25
+ export class BiffWorksheetModel {
26
+ _cellMap = new Map();
27
+ _merges = [];
28
+ _cfs = [];
29
+ _formulas = new Map(); // "r,c" → A1 수식
30
+ _colWidths = new Map(); // col(0-base) → coldx(1/256 char)
31
+ _autoFilter;
32
+ _zoom;
33
+ _freeze;
34
+ _tabColor;
35
+ _drawingRelId;
36
+ _maxRow = 0;
37
+ _maxCol = 0;
38
+ constructor(bytes) {
39
+ if (bytes != null)
40
+ this._decode(bytes);
41
+ }
42
+ _decode(buf) {
43
+ let curRow = -1;
44
+ let prevCol = -1;
45
+ let inData = false;
46
+ let curCf;
47
+ for (const rec of readAllRecords(buf)) {
48
+ if (rec.type === REC.BrtMergeCell) {
49
+ const p = rec.payload;
50
+ this._merges.push({
51
+ s: { r: readUint32LE(p, 0), c: readUint32LE(p, 8) },
52
+ e: { r: readUint32LE(p, 4), c: readUint32LE(p, 12) },
53
+ });
54
+ continue;
55
+ }
56
+ if (rec.type === REC.BrtColInfo) {
57
+ const p = rec.payload;
58
+ const cf = readUint32LE(p, 0);
59
+ const cl = readUint32LE(p, 4);
60
+ const coldx = readUint32LE(p, 8);
61
+ for (let c = cf; c <= cl; c++)
62
+ this._colWidths.set(c, coldx);
63
+ continue;
64
+ }
65
+ if (rec.type === REC.BrtBeginAFilter) {
66
+ const p = rec.payload;
67
+ this._autoFilter = {
68
+ s: { r: readUint32LE(p, 0), c: readUint32LE(p, 8) },
69
+ e: { r: readUint32LE(p, 4), c: readUint32LE(p, 12) },
70
+ };
71
+ continue;
72
+ }
73
+ if (rec.type === REC.BrtBeginWsView) {
74
+ const z = rec.payload[18] | (rec.payload[19] << 8);
75
+ if (z !== 0 && z !== 100)
76
+ this._zoom = z;
77
+ continue;
78
+ }
79
+ if (rec.type === REC.BrtPane) {
80
+ const dv = new DataView(rec.payload.buffer, rec.payload.byteOffset, rec.payload.length);
81
+ const xSplit = dv.getFloat64(0, true);
82
+ const ySplit = dv.getFloat64(8, true);
83
+ if (xSplit > 0 || ySplit > 0) {
84
+ this._freeze = {};
85
+ if (ySplit > 0)
86
+ this._freeze.r = Math.round(ySplit) - 1;
87
+ if (xSplit > 0)
88
+ this._freeze.c = Math.round(xSplit) - 1;
89
+ }
90
+ continue;
91
+ }
92
+ if (rec.type === REC.BrtWsProp) {
93
+ const p = rec.payload;
94
+ // WsProp: flags(3B) + brtcolorTab(BrtColor 8B@3). byteA@3==0(auto) 이면 탭색 없음.
95
+ // RGB/theme 모두 resolved RGBA(@7-10) 보존. tabColor 문자열 = "AARRGGBB".
96
+ if (p.length >= 11 && p[3] !== 0x00) {
97
+ this._tabColor = `${HEX(p[10])}${HEX(p[7])}${HEX(p[8])}${HEX(p[9])}`;
98
+ }
99
+ continue;
100
+ }
101
+ if (rec.type === REC.BrtDrawing) {
102
+ this._drawingRelId = readXLWideString(rec.payload, 0).value;
103
+ continue;
104
+ }
105
+ if (rec.type === REC.BrtBeginConditionalFormatting) {
106
+ // [MS-XLSB] 2.4.34: ccf(u32) + flags(u32) + SqRfX(crfx u32 + crfx×RfX).
107
+ const p = rec.payload;
108
+ const crfx = readUint32LE(p, 8);
109
+ const ranges = [];
110
+ let off = 12;
111
+ for (let k = 0; k < crfx && off + 16 <= p.length; k++) {
112
+ ranges.push(ExcelUtils.stringifyRangeAddr({
113
+ s: { r: readUint32LE(p, off), c: readUint32LE(p, off + 8) },
114
+ e: { r: readUint32LE(p, off + 4), c: readUint32LE(p, off + 12) },
115
+ }));
116
+ off += 16;
117
+ }
118
+ curCf = { sqref: ranges.join(" "), rules: [] };
119
+ this._cfs.push(curCf);
120
+ continue;
121
+ }
122
+ if (rec.type === REC.BrtEndConditionalFormatting) {
123
+ curCf = undefined;
124
+ continue;
125
+ }
126
+ if (rec.type === REC.BrtBeginCFRule && curCf != null) {
127
+ const decoded = this._decodeCfRule(rec.payload);
128
+ if (decoded != null)
129
+ curCf.rules.push(decoded);
130
+ continue;
131
+ }
132
+ if (rec.type === REC.BrtBeginSheetData) {
133
+ inData = true;
134
+ continue;
135
+ }
136
+ if (rec.type === REC.BrtEndSheetData) {
137
+ inData = false;
138
+ continue;
139
+ }
140
+ if (!inData)
141
+ continue;
142
+ if (rec.type === REC.BrtRowHdr) {
143
+ curRow = readUint32LE(rec.payload, 0);
144
+ prevCol = -1;
145
+ if (curRow > this._maxRow)
146
+ this._maxRow = curRow;
147
+ continue;
148
+ }
149
+ if (curRow < 0)
150
+ continue;
151
+ if (rec.type === REC.BrtFmlaNum) {
152
+ const p = rec.payload;
153
+ const col = readUint32LE(p, 0);
154
+ const cce = readUint32LE(p, 18);
155
+ this._formulas.set(`${curRow},${col}`, decodeFormula(p.subarray(22, 22 + cce)));
156
+ prevCol = col;
157
+ if (col > this._maxCol)
158
+ this._maxCol = col;
159
+ continue;
160
+ }
161
+ const cell = decodeBiffCell(rec, prevCol);
162
+ if (cell == null)
163
+ continue;
164
+ prevCol = cell.col;
165
+ if (cell.col > this._maxCol)
166
+ this._maxCol = cell.col;
167
+ if (cell.val != null) {
168
+ this._cellMap.set(`${curRow},${cell.col}`, {
169
+ type: cell.cellType,
170
+ val: cell.val,
171
+ styleId: cell.styleId,
172
+ });
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * BrtBeginCFRule([MS-XLSB] 2.4.23) payload → CF 규칙 spec.
178
+ * cellIs/expression/text 만 복원. 미지원 rgce(함수 등)는 decodeFormula 실패 시 formula 를 비움
179
+ * (외부 파일 best-effort 읽기 — 셀 데이터 보존 우선).
180
+ */
181
+ _decodeCfRule(p) {
182
+ if (p.length < 42)
183
+ return undefined;
184
+ const iType = readUint32LE(p, 0);
185
+ const iTemplate = readUint32LE(p, 4);
186
+ const dxfId = readUint32LE(p, 8);
187
+ const iParam = readUint32LE(p, 16);
188
+ const cb1 = readUint32LE(p, 30);
189
+ const cb2 = readUint32LE(p, 34);
190
+ // strParam(XLNullableWideString) @42
191
+ let off = 42;
192
+ let text;
193
+ if (readUint32LE(p, off) === 0xffffffff) {
194
+ off += 4;
195
+ }
196
+ else {
197
+ const s = readXLWideString(p, off);
198
+ text = s.value;
199
+ off += s.bytesRead;
200
+ }
201
+ // rgce1/rgce2 (CFParsedFormula: cce u32 + rgce + cb u32)
202
+ const formula = [];
203
+ const readFmla = (cb) => {
204
+ if (cb === 0 || off + 4 > p.length)
205
+ return;
206
+ const cce = readUint32LE(p, off);
207
+ const rgce = p.subarray(off + 4, off + 4 + cce);
208
+ off += 4 + cce;
209
+ const rgcb = off + 4 <= p.length ? readUint32LE(p, off) : 0;
210
+ off += 4 + rgcb;
211
+ try {
212
+ formula.push(decodeFormula(rgce));
213
+ }
214
+ catch {
215
+ // 함수 등 미지원 Ptg — formula 생략
216
+ }
217
+ };
218
+ readFmla(cb1);
219
+ readFmla(cb2);
220
+ let type;
221
+ let operator;
222
+ if (iType === 1) {
223
+ type = "cellIs";
224
+ operator = CF_OPER_REV[iParam];
225
+ }
226
+ else if (iType === 2 && iTemplate === 8) {
227
+ const t = CF_TEXTOPER_REV[iParam];
228
+ type = t.type;
229
+ operator = t.operator;
230
+ }
231
+ else {
232
+ type = "expression";
233
+ }
234
+ const cfRule = { type, formula };
235
+ if (operator != null)
236
+ cfRule.operator = operator;
237
+ if (text != null)
238
+ cfRule.text = text;
239
+ return { dxfId: dxfId.toString(), cfRule };
240
+ }
241
+ get range() {
242
+ return { s: { r: 0, c: 0 }, e: { r: this._maxRow, c: this._maxCol } };
243
+ }
244
+ getCellVal(addr) {
245
+ return this._cellMap.get(`${addr.r},${addr.c}`)?.val;
246
+ }
247
+ getCellType(addr) {
248
+ return this._cellMap.get(`${addr.r},${addr.c}`)?.type;
249
+ }
250
+ getCellStyleId(addr) {
251
+ const c = this._cellMap.get(`${addr.r},${addr.c}`);
252
+ return c != null && c.styleId !== 0 ? c.styleId.toString() : undefined;
253
+ }
254
+ getCellFormula(addr) {
255
+ return this._formulas.get(`${addr.r},${addr.c}`);
256
+ }
257
+ getMergeCells() {
258
+ return this._merges;
259
+ }
260
+ // --- 이하 write/mutation: Stage 3 이후 ---
261
+ setCellType(addr, type) {
262
+ const key = `${addr.r},${addr.c}`;
263
+ const cur = this._cellMap.get(key) ?? { type: undefined, val: "", styleId: 0 };
264
+ cur.type = type;
265
+ this._cellMap.set(key, cur);
266
+ this._grow(addr);
267
+ }
268
+ setCellVal(addr, val) {
269
+ const key = `${addr.r},${addr.c}`;
270
+ if (val == null) {
271
+ this._cellMap.delete(key);
272
+ return;
273
+ }
274
+ const cur = this._cellMap.get(key) ?? { type: undefined, val: "", styleId: 0 };
275
+ cur.val = val;
276
+ this._cellMap.set(key, cur);
277
+ this._grow(addr);
278
+ }
279
+ deleteCell(addr) {
280
+ this._cellMap.delete(`${addr.r},${addr.c}`);
281
+ }
282
+ setCellStyleId(addr, styleId) {
283
+ const key = `${addr.r},${addr.c}`;
284
+ const cur = this._cellMap.get(key) ?? { type: undefined, val: "", styleId: 0 };
285
+ cur.styleId = styleId != null ? parseInt(styleId, 10) : 0;
286
+ this._cellMap.set(key, cur);
287
+ this._grow(addr);
288
+ }
289
+ setCellFormula(addr, val) {
290
+ const key = `${addr.r},${addr.c}`;
291
+ if (val == null) {
292
+ this._formulas.delete(key);
293
+ return;
294
+ }
295
+ this._formulas.set(key, val);
296
+ this._grow(addr);
297
+ }
298
+ _grow(addr) {
299
+ if (addr.r > this._maxRow)
300
+ this._maxRow = addr.r;
301
+ if (addr.c > this._maxCol)
302
+ this._maxCol = addr.c;
303
+ }
304
+ setMergeCells(startAddr, endAddr) {
305
+ this._merges.push({ s: { ...startAddr }, e: { ...endAddr } });
306
+ }
307
+ shiftMergeCells(fromRow, delta) {
308
+ for (const m of this._merges) {
309
+ if (m.s.r >= fromRow)
310
+ m.s.r += delta;
311
+ if (m.e.r >= fromRow)
312
+ m.e.r += delta;
313
+ }
314
+ }
315
+ copyRow(sourceR, targetR, options) {
316
+ const cellEntries = [...this._cellMap.entries()];
317
+ const fmlEntries = [...this._formulas.entries()];
318
+ const rowOf = (k) => Number(k.slice(0, k.indexOf(",")));
319
+ const colOf = (k) => Number(k.slice(k.indexOf(",") + 1));
320
+ for (const [k] of cellEntries)
321
+ if (rowOf(k) === targetR)
322
+ this._cellMap.delete(k);
323
+ for (const [k] of fmlEntries)
324
+ if (rowOf(k) === targetR)
325
+ this._formulas.delete(k);
326
+ for (const [k, cell] of cellEntries) {
327
+ if (rowOf(k) === sourceR) {
328
+ const c = colOf(k);
329
+ this._cellMap.set(`${targetR},${c}`, { ...cell });
330
+ this._grow({ r: targetR, c });
331
+ }
332
+ }
333
+ for (const [k, f] of fmlEntries) {
334
+ if (rowOf(k) === sourceR)
335
+ this._formulas.set(`${targetR},${colOf(k)}`, f);
336
+ }
337
+ if (options?.skipMerge === true)
338
+ return;
339
+ const rowDiff = targetR - sourceR;
340
+ const srcMerges = this._merges
341
+ .filter((m) => m.s.r <= sourceR && m.e.r >= sourceR)
342
+ .map((m) => ({ s: { ...m.s }, e: { ...m.e } }));
343
+ for (let i = this._merges.length - 1; i >= 0; i--) {
344
+ const m = this._merges[i];
345
+ if (m.s.r <= targetR && m.e.r >= targetR)
346
+ this._merges.splice(i, 1);
347
+ }
348
+ for (const m of srcMerges) {
349
+ this._merges.push({
350
+ s: { r: m.s.r + rowDiff, c: m.s.c },
351
+ e: { r: m.e.r + rowDiff, c: m.e.c },
352
+ });
353
+ }
354
+ }
355
+ copyCell(sourceAddr, targetAddr) {
356
+ const tk = `${targetAddr.r},${targetAddr.c}`;
357
+ const sk = `${sourceAddr.r},${sourceAddr.c}`;
358
+ this._cellMap.delete(tk);
359
+ this._formulas.delete(tk);
360
+ const cell = this._cellMap.get(sk);
361
+ if (cell != null) {
362
+ this._cellMap.set(tk, { ...cell });
363
+ this._grow(targetAddr);
364
+ }
365
+ const f = this._formulas.get(sk);
366
+ if (f != null)
367
+ this._formulas.set(tk, f);
368
+ }
369
+ addConditionalFormatting(sqref, rules) {
370
+ this._cfs.push({
371
+ sqref,
372
+ rules: rules.map((r) => ({ dxfId: r.dxfId, cfRule: r.cfRule })),
373
+ });
374
+ }
375
+ /** @internal 테스트용 — 디코드된 조건부 서식. */
376
+ get conditionalFormats() {
377
+ return this._cfs;
378
+ }
379
+ setTabColor(rgb) {
380
+ this._tabColor = rgb;
381
+ }
382
+ setZoom(percent) {
383
+ this._zoom = percent;
384
+ }
385
+ freezeAt(point) {
386
+ this._freeze = { ...point };
387
+ }
388
+ setAutoFilter(range) {
389
+ this._autoFilter = { s: { ...range.s }, e: { ...range.e } };
390
+ }
391
+ setColWidth(colIndex, width) {
392
+ const col = parseInt(colIndex, 10) - 1; // colIndex 는 1-base
393
+ const coldx = Math.round(parseFloat(width) * 256);
394
+ if (!Number.isNaN(col) && !Number.isNaN(coldx))
395
+ this._colWidths.set(col, coldx);
396
+ }
397
+ setDrawingRelId(relId) {
398
+ this._drawingRelId = relId;
399
+ }
400
+ serialize() {
401
+ const parts = [encodeMarker(REC.BrtBeginSheet)];
402
+ // WsProp 는 Excel 필수 — 항상 생성(tabColor 없으면 auto).
403
+ parts.push(encodeBrtWsProp(this._tabColor));
404
+ parts.push(encodeBrtWsDim(0, this._maxRow, 0, this._maxCol));
405
+ // sheetViews 는 Excel 필수 — 항상 생성한다.
406
+ parts.push(encodeMarker(REC.BrtBeginWsViews));
407
+ parts.push(encodeBrtBeginWsView(this._zoom ?? 100));
408
+ if (this._freeze != null) {
409
+ const r = this._freeze.r;
410
+ const c = this._freeze.c;
411
+ const ySplit = r != null ? r + 1 : 0;
412
+ const xSplit = c != null ? c + 1 : 0;
413
+ const pnnAcc = r != null && c != null ? 0 : r != null ? 2 : 1;
414
+ parts.push(encodeBrtPane(xSplit, ySplit, ySplit, xSplit, pnnAcc));
415
+ }
416
+ parts.push(encodeBrtSel());
417
+ parts.push(encodeMarker(REC.BrtEndWsView));
418
+ parts.push(encodeMarker(REC.BrtEndWsViews));
419
+ // SheetFormatPr 는 Excel 필수(기본 행높이 등).
420
+ parts.push(encodeBrtSheetFormatPr());
421
+ if (this._colWidths.size > 0) {
422
+ parts.push(encodeMarker(REC.BrtBeginColInfos));
423
+ for (const [col, coldx] of this._colWidths) {
424
+ parts.push(encodeBrtColInfo(col, col, coldx));
425
+ }
426
+ parts.push(encodeMarker(REC.BrtEndColInfos));
427
+ }
428
+ parts.push(encodeMarker(REC.BrtBeginSheetData));
429
+ // 행 → 열 집합 (값 셀 + 수식 셀 합집합)
430
+ const rowCols = new Map();
431
+ const addKey = (key) => {
432
+ const comma = key.indexOf(",");
433
+ const r = Number(key.slice(0, comma));
434
+ const c = Number(key.slice(comma + 1));
435
+ (rowCols.get(r) ?? rowCols.set(r, new Set()).get(r)).add(c);
436
+ };
437
+ for (const key of this._cellMap.keys())
438
+ addKey(key);
439
+ for (const key of this._formulas.keys())
440
+ addKey(key);
441
+ for (const r of [...rowCols.keys()].sort((a, b) => a - b)) {
442
+ const cols = [...rowCols.get(r)].sort((a, b) => a - b);
443
+ parts.push(encodeBrtRowHdr(r, cols[0], cols[cols.length - 1]));
444
+ for (const c of cols) {
445
+ const fml = this._formulas.get(`${r},${c}`);
446
+ if (fml != null) {
447
+ const cell = this._cellMap.get(`${r},${c}`);
448
+ parts.push(encodeBrtFmlaNum(c, cell?.styleId ?? 0, encodeFormula(fml)));
449
+ }
450
+ else {
451
+ parts.push(this._encodeCell(c, this._cellMap.get(`${r},${c}`)));
452
+ }
453
+ }
454
+ }
455
+ parts.push(encodeMarker(REC.BrtEndSheetData));
456
+ if (this._merges.length > 0) {
457
+ parts.push(encodeBeginCount(REC.BrtBeginMergeCells, this._merges.length));
458
+ for (const m of this._merges)
459
+ parts.push(encodeBrtMergeCell(m.s, m.e));
460
+ parts.push(encodeMarker(REC.BrtEndMergeCells));
461
+ }
462
+ if (this._autoFilter != null) {
463
+ parts.push(encodeBrtBeginAFilter(this._autoFilter.s, this._autoFilter.e));
464
+ parts.push(encodeMarker(REC.BrtEndAFilter));
465
+ }
466
+ // CF 규칙 priority 는 시트 전역 1-base 카운터(고유·>0 필수, [MS-XLSB] 2.4.23 iPri).
467
+ let cfPriority = 1;
468
+ for (const cf of this._cfs) {
469
+ parts.push(encodeBrtBeginConditionalFormatting(cf.sqref, cf.rules.length));
470
+ for (const rule of cf.rules) {
471
+ parts.push(encodeBrtBeginCFRule(parseInt(rule.dxfId, 10), cfPriority++, rule.cfRule));
472
+ parts.push(encodeMarker(REC.BrtEndCFRule));
473
+ }
474
+ parts.push(encodeMarker(REC.BrtEndConditionalFormatting));
475
+ }
476
+ if (this._drawingRelId != null) {
477
+ parts.push(encodeBrtDrawing(this._drawingRelId));
478
+ }
479
+ parts.push(encodeMarker(REC.BrtEndSheet));
480
+ return concatBytes(parts);
481
+ }
482
+ _encodeCell(col, cell) {
483
+ if (cell.type === "b") {
484
+ return encodeBrtCellBool(col, cell.styleId, cell.val === "1");
485
+ }
486
+ if (cell.type === "s") {
487
+ return encodeBrtCellIsst(col, cell.styleId, parseInt(cell.val, 10));
488
+ }
489
+ if (cell.type === "str" || cell.type === "inlineStr") {
490
+ return encodeBrtCellSt(col, cell.styleId, cell.val);
491
+ }
492
+ return encodeBrtCellReal(col, cell.styleId, parseFloat(cell.val));
493
+ }
494
+ }
495
+ //# sourceMappingURL=biff-worksheet-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biff-worksheet-model.js","sourceRoot":"","sources":["../../src/biff/biff-worksheet-model.ts"],"names":[],"mappings":"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"}