@simplysm/excel 1.0.138 → 13.0.0-beta.2

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 (207) hide show
  1. package/.cache/typecheck-browser.tsbuildinfo +1 -0
  2. package/.cache/typecheck-node.tsbuildinfo +1 -0
  3. package/.cache/typecheck-tests-browser.tsbuildinfo +1 -0
  4. package/.cache/typecheck-tests-node.tsbuildinfo +1 -0
  5. package/README.md +491 -0
  6. package/dist/core-common/src/common.types.d.ts +74 -0
  7. package/dist/core-common/src/common.types.d.ts.map +1 -0
  8. package/dist/core-common/src/env.d.ts +6 -0
  9. package/dist/core-common/src/env.d.ts.map +1 -0
  10. package/dist/core-common/src/errors/argument-error.d.ts +25 -0
  11. package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
  12. package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
  13. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
  14. package/dist/core-common/src/errors/sd-error.d.ts +27 -0
  15. package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
  16. package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
  17. package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
  18. package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
  19. package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
  20. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
  21. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
  22. package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
  23. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
  24. package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
  25. package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
  26. package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
  27. package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
  28. package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
  29. package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
  30. package/dist/core-common/src/features/event-emitter.d.ts +66 -0
  31. package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
  32. package/dist/core-common/src/features/serial-queue.d.ts +47 -0
  33. package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
  34. package/dist/core-common/src/index.d.ts +32 -0
  35. package/dist/core-common/src/index.d.ts.map +1 -0
  36. package/dist/core-common/src/types/date-only.d.ts +152 -0
  37. package/dist/core-common/src/types/date-only.d.ts.map +1 -0
  38. package/dist/core-common/src/types/date-time.d.ts +96 -0
  39. package/dist/core-common/src/types/date-time.d.ts.map +1 -0
  40. package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
  41. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
  42. package/dist/core-common/src/types/time.d.ts +68 -0
  43. package/dist/core-common/src/types/time.d.ts.map +1 -0
  44. package/dist/core-common/src/types/uuid.d.ts +35 -0
  45. package/dist/core-common/src/types/uuid.d.ts.map +1 -0
  46. package/dist/core-common/src/utils/bytes.d.ts +51 -0
  47. package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
  48. package/dist/core-common/src/utils/date-format.d.ts +90 -0
  49. package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
  50. package/dist/core-common/src/utils/json.d.ts +34 -0
  51. package/dist/core-common/src/utils/json.d.ts.map +1 -0
  52. package/dist/core-common/src/utils/num.d.ts +60 -0
  53. package/dist/core-common/src/utils/num.d.ts.map +1 -0
  54. package/dist/core-common/src/utils/obj.d.ts +258 -0
  55. package/dist/core-common/src/utils/obj.d.ts.map +1 -0
  56. package/dist/core-common/src/utils/path.d.ts +23 -0
  57. package/dist/core-common/src/utils/path.d.ts.map +1 -0
  58. package/dist/core-common/src/utils/primitive.d.ts +18 -0
  59. package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
  60. package/dist/core-common/src/utils/str.d.ts +103 -0
  61. package/dist/core-common/src/utils/str.d.ts.map +1 -0
  62. package/dist/core-common/src/utils/template-strings.d.ts +84 -0
  63. package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
  64. package/dist/core-common/src/utils/transferable.d.ts +47 -0
  65. package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
  66. package/dist/core-common/src/utils/wait.d.ts +19 -0
  67. package/dist/core-common/src/utils/wait.d.ts.map +1 -0
  68. package/dist/core-common/src/utils/xml.d.ts +36 -0
  69. package/dist/core-common/src/utils/xml.d.ts.map +1 -0
  70. package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
  71. package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
  72. package/dist/excel/src/excel-cell.d.ts +68 -0
  73. package/dist/excel/src/excel-cell.d.ts.map +1 -0
  74. package/dist/excel/src/excel-col.d.ts +19 -0
  75. package/dist/excel/src/excel-col.d.ts.map +1 -0
  76. package/dist/excel/src/excel-row.d.ts +17 -0
  77. package/dist/excel/src/excel-row.d.ts.map +1 -0
  78. package/dist/excel/src/excel-workbook.d.ts +66 -0
  79. package/dist/excel/src/excel-workbook.d.ts.map +1 -0
  80. package/dist/excel/src/excel-worksheet.d.ts +102 -0
  81. package/dist/excel/src/excel-worksheet.d.ts.map +1 -0
  82. package/dist/excel/src/excel-wrapper.d.ts +42 -0
  83. package/dist/excel/src/excel-wrapper.d.ts.map +1 -0
  84. package/dist/excel/src/index.d.ts +9 -0
  85. package/dist/excel/src/index.d.ts.map +1 -0
  86. package/dist/excel/src/types.d.ts +445 -0
  87. package/dist/excel/src/types.d.ts.map +1 -0
  88. package/dist/excel/src/utils/excel-utils.d.ts +50 -0
  89. package/dist/excel/src/utils/excel-utils.d.ts.map +1 -0
  90. package/dist/excel/src/utils/zip-cache.d.ts +23 -0
  91. package/dist/excel/src/utils/zip-cache.d.ts.map +1 -0
  92. package/dist/excel/src/xml/excel-xml-content-type.d.ts +12 -0
  93. package/dist/excel/src/xml/excel-xml-content-type.d.ts.map +1 -0
  94. package/dist/excel/src/xml/excel-xml-drawing.d.ts +26 -0
  95. package/dist/excel/src/xml/excel-xml-drawing.d.ts.map +1 -0
  96. package/dist/excel/src/xml/excel-xml-relationship.d.ts +18 -0
  97. package/dist/excel/src/xml/excel-xml-relationship.d.ts.map +1 -0
  98. package/dist/excel/src/xml/excel-xml-shared-string.d.ts +19 -0
  99. package/dist/excel/src/xml/excel-xml-shared-string.d.ts.map +1 -0
  100. package/dist/excel/src/xml/excel-xml-style.d.ts +31 -0
  101. package/dist/excel/src/xml/excel-xml-style.d.ts.map +1 -0
  102. package/dist/excel/src/xml/excel-xml-unknown.d.ts +11 -0
  103. package/dist/excel/src/xml/excel-xml-unknown.d.ts.map +1 -0
  104. package/dist/excel/src/xml/excel-xml-workbook.d.ts +22 -0
  105. package/dist/excel/src/xml/excel-xml-workbook.d.ts.map +1 -0
  106. package/dist/excel/src/xml/excel-xml-worksheet.d.ts +103 -0
  107. package/dist/excel/src/xml/excel-xml-worksheet.d.ts.map +1 -0
  108. package/dist/excel-cell.js +261 -0
  109. package/dist/excel-cell.js.map +7 -0
  110. package/dist/excel-col.js +36 -0
  111. package/dist/excel-col.js.map +7 -0
  112. package/dist/excel-row.js +31 -0
  113. package/dist/excel-row.js.map +7 -0
  114. package/dist/excel-workbook.js +137 -0
  115. package/dist/excel-workbook.js.map +7 -0
  116. package/dist/excel-worksheet.js +279 -0
  117. package/dist/excel-worksheet.js.map +7 -0
  118. package/dist/excel-wrapper.js +220 -0
  119. package/dist/excel-wrapper.js.map +7 -0
  120. package/dist/index.js +9 -15
  121. package/dist/index.js.map +7 -1
  122. package/dist/types.js +1 -0
  123. package/dist/types.js.map +7 -0
  124. package/dist/utils/excel-utils.js +162 -0
  125. package/dist/utils/excel-utils.js.map +7 -0
  126. package/dist/utils/zip-cache.js +74 -0
  127. package/dist/utils/zip-cache.js.map +7 -0
  128. package/dist/xml/excel-xml-content-type.js +57 -0
  129. package/dist/xml/excel-xml-content-type.js.map +7 -0
  130. package/dist/xml/excel-xml-drawing.js +77 -0
  131. package/dist/xml/excel-xml-drawing.js.map +7 -0
  132. package/dist/xml/excel-xml-relationship.js +72 -0
  133. package/dist/xml/excel-xml-relationship.js.map +7 -0
  134. package/dist/xml/excel-xml-shared-string.js +61 -0
  135. package/dist/xml/excel-xml-shared-string.js.map +7 -0
  136. package/dist/xml/excel-xml-style.js +313 -0
  137. package/dist/xml/excel-xml-style.js.map +7 -0
  138. package/dist/xml/excel-xml-unknown.js +11 -0
  139. package/dist/xml/excel-xml-unknown.js.map +7 -0
  140. package/dist/xml/excel-xml-workbook.js +94 -0
  141. package/dist/xml/excel-xml-workbook.js.map +7 -0
  142. package/dist/xml/excel-xml-worksheet.js +405 -0
  143. package/dist/xml/excel-xml-worksheet.js.map +7 -0
  144. package/package.json +13 -7
  145. package/src/excel-cell.ts +326 -0
  146. package/src/excel-col.ts +43 -0
  147. package/src/excel-row.ts +37 -0
  148. package/src/excel-workbook.ts +206 -0
  149. package/src/excel-worksheet.ts +380 -0
  150. package/src/excel-wrapper.ts +219 -0
  151. package/src/index.ts +13 -9
  152. package/src/types.ts +396 -0
  153. package/src/utils/excel-utils.ts +201 -0
  154. package/src/utils/zip-cache.ts +103 -0
  155. package/src/xml/excel-xml-content-type.ts +64 -0
  156. package/src/xml/excel-xml-drawing.ts +87 -0
  157. package/src/xml/excel-xml-relationship.ts +86 -0
  158. package/src/xml/excel-xml-shared-string.ts +80 -0
  159. package/src/xml/excel-xml-style.ts +393 -0
  160. package/src/xml/excel-xml-unknown.ts +11 -0
  161. package/src/xml/excel-xml-workbook.ts +112 -0
  162. package/src/xml/excel-xml-worksheet.ts +544 -0
  163. package/tests/excel-cell.spec.ts +407 -0
  164. package/tests/excel-col.spec.ts +112 -0
  165. package/tests/excel-row.spec.ts +71 -0
  166. package/tests/excel-workbook.spec.ts +166 -0
  167. package/tests/excel-worksheet.spec.ts +389 -0
  168. package/tests/excel-wrapper.spec.ts +275 -0
  169. package/tests/fixtures/logo.png +0 -0
  170. package/tests/image-insert.spec.ts +188 -0
  171. package/tests/utils/excel-utils.spec.ts +240 -0
  172. package/dist/ExcelCell.d.ts +0 -13
  173. package/dist/ExcelCell.js +0 -161
  174. package/dist/ExcelCell.js.map +0 -1
  175. package/dist/ExcelCellStyle.d.ts +0 -31
  176. package/dist/ExcelCellStyle.js +0 -312
  177. package/dist/ExcelCellStyle.js.map +0 -1
  178. package/dist/ExcelColumn.d.ts +0 -8
  179. package/dist/ExcelColumn.js +0 -49
  180. package/dist/ExcelColumn.js.map +0 -1
  181. package/dist/ExcelRow.d.ts +0 -7
  182. package/dist/ExcelRow.js +0 -21
  183. package/dist/ExcelRow.js.map +0 -1
  184. package/dist/ExcelWorkbook.d.ts +0 -24
  185. package/dist/ExcelWorkbook.js +0 -418
  186. package/dist/ExcelWorkbook.js.map +0 -1
  187. package/dist/ExcelWorksheet.d.ts +0 -14
  188. package/dist/ExcelWorksheet.js +0 -31
  189. package/dist/ExcelWorksheet.js.map +0 -1
  190. package/dist/index.d.ts +0 -9
  191. package/dist/utils/ExcelUtils.d.ts +0 -14
  192. package/dist/utils/ExcelUtils.js +0 -66
  193. package/dist/utils/ExcelUtils.js.map +0 -1
  194. package/dist/utils/XmlConvert.d.ts +0 -4
  195. package/dist/utils/XmlConvert.js +0 -64
  196. package/dist/utils/XmlConvert.js.map +0 -1
  197. package/src/ExcelCell.ts +0 -163
  198. package/src/ExcelCellStyle.ts +0 -297
  199. package/src/ExcelColumn.ts +0 -46
  200. package/src/ExcelRow.ts +0 -17
  201. package/src/ExcelWorkbook.ts +0 -369
  202. package/src/ExcelWorksheet.ts +0 -27
  203. package/src/utils/ExcelUtils.ts +0 -68
  204. package/src/utils/XmlConvert.ts +0 -20
  205. package/tsconfig.build.json +0 -18
  206. package/tsconfig.json +0 -18
  207. package/tslint.json +0 -5
@@ -0,0 +1,11 @@
1
+ import type { ExcelXml } from "../types";
2
+ /**
3
+ * 알 수 없는 형식의 Excel XML 데이터를 보존하는 클래스.
4
+ * 원본 데이터를 손실 없이 유지한다.
5
+ */
6
+ export declare class ExcelXmlUnknown implements ExcelXml {
7
+ readonly data: Record<string, unknown>;
8
+ constructor(data: Record<string, unknown>);
9
+ cleanup(): void;
10
+ }
11
+ //# sourceMappingURL=excel-xml-unknown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-xml-unknown.d.ts","sourceRoot":"","sources":["../../../../src/xml/excel-xml-unknown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,QAAQ;aAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAA7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzD,OAAO,IAAI,IAAI;CAChB"}
@@ -0,0 +1,22 @@
1
+ import "@simplysm/core-common";
2
+ import type { ExcelXml, ExcelXmlWorkbookData } from "../types";
3
+ /**
4
+ * xl/workbook.xml 파일을 관리하는 클래스.
5
+ * 워크시트 목록과 관계 ID를 처리한다.
6
+ */
7
+ export declare class ExcelXmlWorkbook implements ExcelXml {
8
+ data: ExcelXmlWorkbookData;
9
+ constructor(data?: ExcelXmlWorkbookData);
10
+ get lastWsRelId(): number | undefined;
11
+ get sheetNames(): string[];
12
+ addWorksheet(name: string): this;
13
+ cleanup(): void;
14
+ initializeView(): void;
15
+ getWsRelIdByName(name: string): number | undefined;
16
+ getWsRelIdByIndex(index: number): number | undefined;
17
+ getWorksheetNameById(id: number): string | undefined;
18
+ setWorksheetNameById(id: number, newName: string): void;
19
+ private _getSheetDataById;
20
+ private _getReplacedName;
21
+ }
22
+ //# sourceMappingURL=excel-xml-workbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-xml-workbook.d.ts","sourceRoot":"","sources":["../../../../src/xml/excel-xml-workbook.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE/D;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,IAAI,EAAE,oBAAoB,CAAC;gBAEf,IAAI,CAAC,EAAE,oBAAoB;IAevC,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAKpC;IAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiBhC,OAAO,IAAI,IAAI;IAwBf,cAAc,IAAI,IAAI;IAItB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIlD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASvD,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;CAIzB"}
@@ -0,0 +1,103 @@
1
+ import type { ExcelAddressRangePoint, ExcelCellType, ExcelXml, ExcelXmlWorksheetData } from "../types";
2
+ import "@simplysm/core-common";
3
+ /**
4
+ * xl/worksheets/sheet*.xml 파일을 관리하는 클래스.
5
+ * 셀 데이터, 병합, 열 너비, 행 높이 등을 처리한다.
6
+ */
7
+ export declare class ExcelXmlWorksheet implements ExcelXml {
8
+ data: ExcelXmlWorksheetData;
9
+ private readonly _dataMap;
10
+ constructor(data?: ExcelXmlWorksheetData);
11
+ get range(): ExcelAddressRangePoint;
12
+ setCellType(addr: {
13
+ r: number;
14
+ c: number;
15
+ }, type: ExcelCellType | undefined): void;
16
+ getCellType(addr: {
17
+ r: number;
18
+ c: number;
19
+ }): ExcelCellType | undefined;
20
+ setCellVal(addr: {
21
+ r: number;
22
+ c: number;
23
+ }, val: string | undefined): void;
24
+ getCellVal(addr: {
25
+ r: number;
26
+ c: number;
27
+ }): string | undefined;
28
+ setCellFormula(addr: {
29
+ r: number;
30
+ c: number;
31
+ }, val: string | undefined): void;
32
+ getCellFormula(addr: {
33
+ r: number;
34
+ c: number;
35
+ }): string | undefined;
36
+ getCellStyleId(addr: {
37
+ r: number;
38
+ c: number;
39
+ }): string | undefined;
40
+ setCellStyleId(addr: {
41
+ r: number;
42
+ c: number;
43
+ }, styleId: string | undefined): void;
44
+ deleteCell(addr: {
45
+ r: number;
46
+ c: number;
47
+ }): void;
48
+ setMergeCells(startAddr: {
49
+ r: number;
50
+ c: number;
51
+ }, endAddr: {
52
+ r: number;
53
+ c: number;
54
+ }): void;
55
+ getMergeCells(): {
56
+ s: {
57
+ r: number;
58
+ c: number;
59
+ };
60
+ e: {
61
+ r: number;
62
+ c: number;
63
+ };
64
+ }[];
65
+ removeMergeCells(fromAddr: {
66
+ r: number;
67
+ c: number;
68
+ }, toAddr: {
69
+ r: number;
70
+ c: number;
71
+ }): void;
72
+ /**
73
+ * 특정 열의 너비를 설정한다.
74
+ *
75
+ * @internal
76
+ * 외부에서는 ExcelCol.setWidth()를 사용한다.
77
+ *
78
+ * @param colIndex 열 인덱스 (1-based, 문자열)
79
+ * @param width 설정할 너비
80
+ */
81
+ setColWidth(colIndex: string, width: string): void;
82
+ setZoom(percent: number): void;
83
+ setFix(point: {
84
+ r?: number;
85
+ c?: number;
86
+ }): void;
87
+ copyRow(sourceR: number, targetR: number): void;
88
+ copyCell(sourceAddr: {
89
+ r: number;
90
+ c: number;
91
+ }, targetAddr: {
92
+ r: number;
93
+ c: number;
94
+ }): void;
95
+ cleanup(): void;
96
+ private _getCellData;
97
+ private _getOrCreateCellData;
98
+ private _getOrCreateRowInfo;
99
+ private _replaceRowData;
100
+ private _replaceCellData;
101
+ private _deleteRow;
102
+ }
103
+ //# sourceMappingURL=excel-xml-worksheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-xml-worksheet.d.ts","sourceRoot":"","sources":["../../../../src/xml/excel-xml-worksheet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,261 @@
1
+ import { DateOnly, DateTime, numParseFloat, numParseInt, strIsNullOrEmpty, Time } from "@simplysm/core-common";
2
+ import { ExcelXmlSharedString as ExcelXmlSharedStringClass } from "./xml/excel-xml-shared-string";
3
+ import { ExcelXmlStyle as ExcelXmlStyleClass } from "./xml/excel-xml-style";
4
+ import { ExcelUtils } from "./utils/excel-utils";
5
+ class ExcelCell {
6
+ constructor(_zipCache, _targetFileName, _r, _c) {
7
+ this._zipCache = _zipCache;
8
+ this._targetFileName = _targetFileName;
9
+ this._r = _r;
10
+ this._c = _c;
11
+ this.addr = { r: this._r, c: this._c };
12
+ }
13
+ /** 셀 주소 (0-based 행/열 인덱스) */
14
+ addr;
15
+ //#region Value Methods
16
+ /** 셀에 수식 설정 (undefined: 수식 삭제) */
17
+ async setFormula(val) {
18
+ if (val === void 0) {
19
+ await this._deleteCell(this.addr);
20
+ } else {
21
+ const wsData = await this._getWsData();
22
+ wsData.setCellType(this.addr, "str");
23
+ wsData.setCellVal(this.addr, void 0);
24
+ wsData.setCellFormula(this.addr, val);
25
+ }
26
+ }
27
+ /** 셀의 수식 반환 */
28
+ async getFormula() {
29
+ const wsData = await this._getWsData();
30
+ return wsData.getCellFormula(this.addr);
31
+ }
32
+ /** 셀 값 설정 (undefined: 셀 삭제) */
33
+ async setVal(val) {
34
+ if (val === void 0) {
35
+ await this._deleteCell(this.addr);
36
+ } else if (typeof val === "string") {
37
+ const wsData = await this._getWsData();
38
+ const ssData = await this._getOrCreateSsData();
39
+ const ssId = ssData.getIdByString(val);
40
+ if (ssId !== void 0) {
41
+ wsData.setCellType(this.addr, "s");
42
+ wsData.setCellVal(this.addr, ssId.toString());
43
+ } else {
44
+ const newSsId = ssData.add(val);
45
+ wsData.setCellType(this.addr, "s");
46
+ wsData.setCellVal(this.addr, newSsId.toString());
47
+ }
48
+ } else if (typeof val === "boolean") {
49
+ const wsData = await this._getWsData();
50
+ wsData.setCellType(this.addr, "b");
51
+ wsData.setCellVal(this.addr, val ? "1" : "0");
52
+ } else if (typeof val === "number") {
53
+ const wsData = await this._getWsData();
54
+ wsData.setCellType(this.addr, void 0);
55
+ wsData.setCellVal(this.addr, val.toString());
56
+ } else if (val instanceof DateOnly || val instanceof DateTime || val instanceof Time) {
57
+ const wsData = await this._getWsData();
58
+ wsData.setCellType(this.addr, void 0);
59
+ wsData.setCellVal(this.addr, ExcelUtils.convertTimeTickToNumber(val.tick).toString());
60
+ const numFmtName = val instanceof DateOnly ? "DateOnly" : val instanceof DateTime ? "DateTime" : "Time";
61
+ await this._setStyleInternal({ numFmtId: ExcelUtils.convertNumFmtNameToId(numFmtName).toString() });
62
+ } else {
63
+ throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uD0C0\uC785\uC785\uB2C8\uB2E4: ${typeof val}`);
64
+ }
65
+ }
66
+ /** 셀 값 반환 */
67
+ async getVal() {
68
+ const wsData = await this._getWsData();
69
+ const cellVal = wsData.getCellVal(this.addr);
70
+ if (cellVal === void 0 || strIsNullOrEmpty(cellVal)) {
71
+ return void 0;
72
+ }
73
+ const cellType = wsData.getCellType(this.addr);
74
+ if (cellType === "s") {
75
+ const ssData = await this._getOrCreateSsData();
76
+ const ssId = numParseInt(cellVal);
77
+ if (ssId == null) {
78
+ throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] SharedString ID \uD30C\uC2F1 \uC2E4\uD328: ${cellVal}`);
79
+ }
80
+ return ssData.getStringById(ssId);
81
+ } else if (cellType === "str") {
82
+ return cellVal;
83
+ } else if (cellType === "inlineStr") {
84
+ return cellVal;
85
+ } else if (cellType === "b") {
86
+ return cellVal === "1";
87
+ } else if (cellType === "n") {
88
+ return parseFloat(cellVal);
89
+ } else if (cellType === "e") {
90
+ throw new Error(
91
+ `[${ExcelUtils.stringifyAddr(this.addr)}] \uC140 \uD0C0\uC785 \uBD84\uC11D \uC2E4\uD328: \uC140\uC5D0 \uC5D0\uB7EC \uAC12\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4 (${cellVal})`
92
+ );
93
+ } else {
94
+ const cellStyleId = wsData.getCellStyleId(this.addr);
95
+ if (cellStyleId === void 0) {
96
+ return parseFloat(cellVal);
97
+ }
98
+ const styleData = await this._getStyleData();
99
+ if (styleData == null) {
100
+ return parseFloat(cellVal);
101
+ }
102
+ const numFmtId = styleData.get(cellStyleId).numFmtId;
103
+ if (numFmtId === void 0) {
104
+ return parseFloat(cellVal);
105
+ }
106
+ const numFmtCode = styleData.getNumFmtCode(numFmtId);
107
+ let numFmt;
108
+ if (numFmtCode !== void 0) {
109
+ numFmt = ExcelUtils.convertNumFmtCodeToName(numFmtCode);
110
+ } else {
111
+ const numFmtIdNum = numParseInt(numFmtId);
112
+ if (numFmtIdNum == null) {
113
+ throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] numFmtId \uD30C\uC2F1 \uC2E4\uD328: ${numFmtId}`);
114
+ }
115
+ numFmt = ExcelUtils.convertNumFmtIdToName(numFmtIdNum);
116
+ }
117
+ if (numFmt === "number") {
118
+ return parseFloat(cellVal);
119
+ } else if (numFmt === "string") {
120
+ return cellVal;
121
+ } else {
122
+ const dateNum = numParseFloat(cellVal);
123
+ if (dateNum == null) {
124
+ throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] \uB0A0\uC9DC \uC22B\uC790 \uD30C\uC2F1 \uC2E4\uD328: ${cellVal}`);
125
+ }
126
+ const tick = ExcelUtils.convertNumberToTimeTick(dateNum);
127
+ if (numFmt === "DateOnly") {
128
+ return new DateOnly(tick);
129
+ } else if (numFmt === "DateTime") {
130
+ return new DateTime(tick);
131
+ } else {
132
+ return new Time(tick);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ //#endregion
138
+ //#region Merge Methods
139
+ /**
140
+ * 현재 셀부터 지정된 끝 좌표까지 셀 병합
141
+ * @param r 병합 끝 행 인덱스 (0-based)
142
+ * @param c 병합 끝 열 인덱스 (0-based)
143
+ * @example
144
+ * // A1 셀에서 호출하면 A1:C3 범위 (3행 x 3열)를 병합
145
+ * await ws.cell(0, 0).merge(2, 2);
146
+ */
147
+ async merge(r, c) {
148
+ const wsData = await this._getWsData();
149
+ wsData.setMergeCells(this.addr, { r, c });
150
+ }
151
+ //#endregion
152
+ //#region Style Methods
153
+ /** 셀의 스타일 ID 반환 */
154
+ async getStyleId() {
155
+ const wsData = await this._getWsData();
156
+ return wsData.getCellStyleId(this.addr);
157
+ }
158
+ /** 셀의 스타일 ID 설정 */
159
+ async setStyleId(styleId) {
160
+ const wsData = await this._getWsData();
161
+ wsData.setCellStyleId(this.addr, styleId);
162
+ }
163
+ /**
164
+ * 셀 스타일 설정
165
+ * @param opts 스타일 옵션
166
+ * @param opts.background 배경색 (ARGB 형식, 8자리 16진수. 예: "FFFF0000")
167
+ * @param opts.border 테두리 위치 배열 (예: ["left", "right", "top", "bottom"])
168
+ * @param opts.horizontalAlign 가로 정렬 ("left", "center", "right")
169
+ * @param opts.verticalAlign 세로 정렬 ("top", "center", "bottom")
170
+ * @param opts.numberFormat 숫자 형식 ("number", "DateOnly", "DateTime", "Time", "string")
171
+ */
172
+ async setStyle(opts) {
173
+ const style = {};
174
+ if (opts.background != null) {
175
+ if (!/^[0-9A-F]{8}$/i.test(opts.background)) {
176
+ throw new Error("\uC0C9\uC0C1 \uD615\uC2DD\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4. (\uD615\uC2DD: 00000000: alpha(\uC5ED)+rgb)");
177
+ }
178
+ style.background = opts.background;
179
+ }
180
+ if (opts.border != null) {
181
+ style.border = opts.border;
182
+ }
183
+ if (opts.horizontalAlign != null) {
184
+ style.horizontalAlign = opts.horizontalAlign;
185
+ }
186
+ if (opts.verticalAlign != null) {
187
+ style.verticalAlign = opts.verticalAlign;
188
+ }
189
+ if (opts.numberFormat != null) {
190
+ style.numFmtId = ExcelUtils.convertNumFmtNameToId(opts.numberFormat).toString();
191
+ }
192
+ await this._setStyleInternal(style);
193
+ }
194
+ //#endregion
195
+ //#region Private Methods
196
+ async _deleteCell(addr) {
197
+ const wsData = await this._getWsData();
198
+ wsData.deleteCell(addr);
199
+ }
200
+ async _getWsData() {
201
+ return await this._zipCache.get(`xl/worksheets/${this._targetFileName}`);
202
+ }
203
+ async _setStyleInternal(style) {
204
+ const wsData = await this._getWsData();
205
+ const styleData = await this._getOrCreateStyleData();
206
+ let styleId = wsData.getCellStyleId(this.addr);
207
+ if (styleId == null) {
208
+ styleId = styleData.add(style);
209
+ } else {
210
+ styleId = styleData.addWithClone(styleId, style);
211
+ }
212
+ wsData.setCellStyleId(this.addr, styleId);
213
+ }
214
+ async _getTypeData() {
215
+ return await this._zipCache.get("[Content_Types].xml");
216
+ }
217
+ async _getSsData() {
218
+ return await this._zipCache.get("xl/sharedStrings.xml");
219
+ }
220
+ async _getWbRelData() {
221
+ return await this._zipCache.get("xl/_rels/workbook.xml.rels");
222
+ }
223
+ async _getStyleData() {
224
+ return await this._zipCache.get("xl/styles.xml");
225
+ }
226
+ async _getOrCreateSsData() {
227
+ let ssData = await this._getSsData();
228
+ if (ssData == null) {
229
+ ssData = new ExcelXmlSharedStringClass();
230
+ this._zipCache.set("xl/sharedStrings.xml", ssData);
231
+ const typeData = await this._getTypeData();
232
+ typeData.add(
233
+ "/xl/sharedStrings.xml",
234
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"
235
+ );
236
+ const wbRelData = await this._getWbRelData();
237
+ wbRelData.add(
238
+ "sharedStrings.xml",
239
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"
240
+ );
241
+ }
242
+ return ssData;
243
+ }
244
+ async _getOrCreateStyleData() {
245
+ let styleData = await this._getStyleData();
246
+ if (styleData == null) {
247
+ styleData = new ExcelXmlStyleClass();
248
+ this._zipCache.set("xl/styles.xml", styleData);
249
+ const typeData = await this._getTypeData();
250
+ typeData.add("/xl/styles.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml");
251
+ const wbRelData = await this._getWbRelData();
252
+ wbRelData.add("styles.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles");
253
+ }
254
+ return styleData;
255
+ }
256
+ //#endregion
257
+ }
258
+ export {
259
+ ExcelCell
260
+ };
261
+ //# sourceMappingURL=excel-cell.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/excel-cell.ts"],
4
+ "sourcesContent": ["import type { ExcelXmlWorksheet } from \"./xml/excel-xml-worksheet\";\nimport type { ExcelXmlContentType } from \"./xml/excel-xml-content-type\";\nimport type { ExcelXmlRelationship } from \"./xml/excel-xml-relationship\";\nimport type { ExcelXmlStyle, ExcelStyle } from \"./xml/excel-xml-style\";\nimport type { ExcelXmlSharedString } from \"./xml/excel-xml-shared-string\";\nimport type { ZipCache } from \"./utils/zip-cache\";\nimport type { ExcelAddressPoint, ExcelStyleOptions, ExcelValueType } from \"./types\";\nimport { DateOnly, DateTime, numParseFloat, numParseInt, strIsNullOrEmpty, Time } from \"@simplysm/core-common\";\nimport { ExcelXmlSharedString as ExcelXmlSharedStringClass } from \"./xml/excel-xml-shared-string\";\nimport { ExcelXmlStyle as ExcelXmlStyleClass } from \"./xml/excel-xml-style\";\nimport { ExcelUtils } from \"./utils/excel-utils\";\n\n/**\n * Excel \uC140\uC744 \uB098\uD0C0\uB0B4\uB294 \uD074\uB798\uC2A4.\n * \uAC12 \uC77D\uAE30/\uC4F0\uAE30, \uC218\uC2DD \uC124\uC815, \uC2A4\uD0C0\uC77C \uC124\uC815, \uC140 \uBCD1\uD569 \uB4F1\uC758 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD55C\uB2E4.\n *\n * @remarks\n * ## \uBE44\uB3D9\uAE30 \uBA54\uC11C\uB4DC \uC124\uACC4\n *\n * `getVal()`, `setVal()` \uB4F1 \uBAA8\uB4E0 \uC140 \uBA54\uC11C\uB4DC\uAC00 `async`\uC778 \uC774\uC720:\n * - \uC140 \uD0C0\uC785\uC5D0 \uB530\uB77C \uD544\uC694\uD55C XML\uB9CC \uC120\uD0DD\uC801\uC73C\uB85C \uB85C\uB4DC\uD55C\uB2E4\n * - \uBB38\uC790\uC5F4 \uC140: SharedStrings.xml \uB85C\uB4DC\n * - \uC22B\uC790 \uC140: SharedStrings \uB85C\uB4DC \uC548\uD568\n * - \uC2A4\uD0C0\uC77C\uC774 \uC788\uB294 \uC140: Styles.xml \uB85C\uB4DC\n *\n * \uC5B4\uB5A4 \uC140\uC744 \uC77D\uC744\uC9C0 \uBBF8\uB9AC \uC54C \uC218 \uC5C6\uAE30 \uB54C\uBB38\uC5D0 \uB3D9\uAE30 \uAD6C\uC870\uB85C\uB294 \uAD6C\uD604\uD560 \uC218 \uC5C6\uB2E4.\n * \uB3D9\uAE30 \uAD6C\uC870\uB85C \uB9CC\uB4E4\uB824\uBA74 \uBAA8\uB4E0 XML\uC744 \uBBF8\uB9AC \uB85C\uB4DC\uD574\uC57C \uD558\uBBC0\uB85C \uB300\uC6A9\uB7C9 \uD30C\uC77C\uC5D0\uC11C \uBA54\uBAA8\uB9AC \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD55C\uB2E4.\n */\nexport class ExcelCell {\n /** \uC140 \uC8FC\uC18C (0-based \uD589/\uC5F4 \uC778\uB371\uC2A4) */\n readonly addr: ExcelAddressPoint;\n\n constructor(\n private readonly _zipCache: ZipCache,\n private readonly _targetFileName: string,\n private readonly _r: number,\n private readonly _c: number,\n ) {\n this.addr = { r: this._r, c: this._c };\n }\n\n //#region Value Methods\n\n /** \uC140\uC5D0 \uC218\uC2DD \uC124\uC815 (undefined: \uC218\uC2DD \uC0AD\uC81C) */\n async setFormula(val: string | undefined): Promise<void> {\n if (val === undefined) {\n await this._deleteCell(this.addr);\n } else {\n const wsData = await this._getWsData();\n wsData.setCellType(this.addr, \"str\");\n wsData.setCellVal(this.addr, undefined);\n wsData.setCellFormula(this.addr, val);\n }\n }\n\n /** \uC140\uC758 \uC218\uC2DD \uBC18\uD658 */\n async getFormula(): Promise<string | undefined> {\n const wsData = await this._getWsData();\n return wsData.getCellFormula(this.addr);\n }\n\n /** \uC140 \uAC12 \uC124\uC815 (undefined: \uC140 \uC0AD\uC81C) */\n async setVal(val: ExcelValueType): Promise<void> {\n if (val === undefined) {\n await this._deleteCell(this.addr);\n } else if (typeof val === \"string\") {\n const wsData = await this._getWsData();\n const ssData = await this._getOrCreateSsData();\n const ssId = ssData.getIdByString(val);\n if (ssId !== undefined) {\n wsData.setCellType(this.addr, \"s\");\n wsData.setCellVal(this.addr, ssId.toString());\n } else {\n const newSsId = ssData.add(val);\n wsData.setCellType(this.addr, \"s\");\n wsData.setCellVal(this.addr, newSsId.toString());\n }\n } else if (typeof val === \"boolean\") {\n const wsData = await this._getWsData();\n wsData.setCellType(this.addr, \"b\");\n wsData.setCellVal(this.addr, val ? \"1\" : \"0\");\n } else if (typeof val === \"number\") {\n const wsData = await this._getWsData();\n wsData.setCellType(this.addr, undefined);\n wsData.setCellVal(this.addr, val.toString());\n } else if (val instanceof DateOnly || val instanceof DateTime || val instanceof Time) {\n const wsData = await this._getWsData();\n wsData.setCellType(this.addr, undefined);\n wsData.setCellVal(this.addr, ExcelUtils.convertTimeTickToNumber(val.tick).toString());\n\n const numFmtName = val instanceof DateOnly ? \"DateOnly\" : val instanceof DateTime ? \"DateTime\" : \"Time\";\n await this._setStyleInternal({ numFmtId: ExcelUtils.convertNumFmtNameToId(numFmtName).toString() });\n } else {\n throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uD0C0\uC785\uC785\uB2C8\uB2E4: ${typeof val}`);\n }\n }\n\n /** \uC140 \uAC12 \uBC18\uD658 */\n async getVal(): Promise<ExcelValueType> {\n const wsData = await this._getWsData();\n const cellVal = wsData.getCellVal(this.addr);\n if (cellVal === undefined || strIsNullOrEmpty(cellVal)) {\n return undefined;\n }\n\n const cellType = wsData.getCellType(this.addr);\n if (cellType === \"s\") {\n const ssData = await this._getOrCreateSsData();\n const ssId = numParseInt(cellVal);\n if (ssId == null) {\n throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] SharedString ID \uD30C\uC2F1 \uC2E4\uD328: ${cellVal}`);\n }\n return ssData.getStringById(ssId);\n } else if (cellType === \"str\") {\n return cellVal;\n } else if (cellType === \"inlineStr\") {\n return cellVal;\n } else if (cellType === \"b\") {\n return cellVal === \"1\";\n } else if (cellType === \"n\") {\n return parseFloat(cellVal);\n } else if (cellType === \"e\") {\n throw new Error(\n `[${ExcelUtils.stringifyAddr(this.addr)}] \uC140 \uD0C0\uC785 \uBD84\uC11D \uC2E4\uD328: \uC140\uC5D0 \uC5D0\uB7EC \uAC12\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4 (${cellVal})`,\n );\n } else {\n // cellType === undefined: \uC22B\uC790 \uB610\uB294 \uB0A0\uC9DC/\uC2DC\uAC04 \uD0C0\uC785\n const cellStyleId = wsData.getCellStyleId(this.addr);\n if (cellStyleId === undefined) {\n return parseFloat(cellVal);\n }\n\n const styleData = await this._getStyleData();\n if (styleData == null) {\n return parseFloat(cellVal);\n }\n\n const numFmtId = styleData.get(cellStyleId).numFmtId;\n if (numFmtId === undefined) {\n return parseFloat(cellVal);\n }\n\n const numFmtCode = styleData.getNumFmtCode(numFmtId);\n let numFmt;\n if (numFmtCode !== undefined) {\n numFmt = ExcelUtils.convertNumFmtCodeToName(numFmtCode);\n } else {\n const numFmtIdNum = numParseInt(numFmtId);\n if (numFmtIdNum == null) {\n throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] numFmtId \uD30C\uC2F1 \uC2E4\uD328: ${numFmtId}`);\n }\n numFmt = ExcelUtils.convertNumFmtIdToName(numFmtIdNum);\n }\n\n if (numFmt === \"number\") {\n return parseFloat(cellVal);\n } else if (numFmt === \"string\") {\n return cellVal;\n } else {\n // DateOnly, DateTime, Time\n const dateNum = numParseFloat(cellVal);\n if (dateNum == null) {\n throw new Error(`[${ExcelUtils.stringifyAddr(this.addr)}] \uB0A0\uC9DC \uC22B\uC790 \uD30C\uC2F1 \uC2E4\uD328: ${cellVal}`);\n }\n const tick = ExcelUtils.convertNumberToTimeTick(dateNum);\n if (numFmt === \"DateOnly\") {\n return new DateOnly(tick);\n } else if (numFmt === \"DateTime\") {\n return new DateTime(tick);\n } else {\n return new Time(tick);\n }\n }\n }\n }\n\n //#endregion\n\n //#region Merge Methods\n\n /**\n * \uD604\uC7AC \uC140\uBD80\uD130 \uC9C0\uC815\uB41C \uB05D \uC88C\uD45C\uAE4C\uC9C0 \uC140 \uBCD1\uD569\n * @param r \uBCD1\uD569 \uB05D \uD589 \uC778\uB371\uC2A4 (0-based)\n * @param c \uBCD1\uD569 \uB05D \uC5F4 \uC778\uB371\uC2A4 (0-based)\n * @example\n * // A1 \uC140\uC5D0\uC11C \uD638\uCD9C\uD558\uBA74 A1:C3 \uBC94\uC704 (3\uD589 x 3\uC5F4)\uB97C \uBCD1\uD569\n * await ws.cell(0, 0).merge(2, 2);\n */\n async merge(r: number, c: number): Promise<void> {\n const wsData = await this._getWsData();\n wsData.setMergeCells(this.addr, { r, c });\n }\n\n //#endregion\n\n //#region Style Methods\n\n /** \uC140\uC758 \uC2A4\uD0C0\uC77C ID \uBC18\uD658 */\n async getStyleId(): Promise<string | undefined> {\n const wsData = await this._getWsData();\n return wsData.getCellStyleId(this.addr);\n }\n\n /** \uC140\uC758 \uC2A4\uD0C0\uC77C ID \uC124\uC815 */\n async setStyleId(styleId: string | undefined): Promise<void> {\n const wsData = await this._getWsData();\n wsData.setCellStyleId(this.addr, styleId);\n }\n\n /**\n * \uC140 \uC2A4\uD0C0\uC77C \uC124\uC815\n * @param opts \uC2A4\uD0C0\uC77C \uC635\uC158\n * @param opts.background \uBC30\uACBD\uC0C9 (ARGB \uD615\uC2DD, 8\uC790\uB9AC 16\uC9C4\uC218. \uC608: \"FFFF0000\")\n * @param opts.border \uD14C\uB450\uB9AC \uC704\uCE58 \uBC30\uC5F4 (\uC608: [\"left\", \"right\", \"top\", \"bottom\"])\n * @param opts.horizontalAlign \uAC00\uB85C \uC815\uB82C (\"left\", \"center\", \"right\")\n * @param opts.verticalAlign \uC138\uB85C \uC815\uB82C (\"top\", \"center\", \"bottom\")\n * @param opts.numberFormat \uC22B\uC790 \uD615\uC2DD (\"number\", \"DateOnly\", \"DateTime\", \"Time\", \"string\")\n */\n async setStyle(opts: ExcelStyleOptions): Promise<void> {\n const style: ExcelStyle = {};\n\n if (opts.background != null) {\n if (!/^[0-9A-F]{8}$/i.test(opts.background)) {\n throw new Error(\"\uC0C9\uC0C1 \uD615\uC2DD\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4. (\uD615\uC2DD: 00000000: alpha(\uC5ED)+rgb)\");\n }\n style.background = opts.background;\n }\n\n if (opts.border != null) {\n style.border = opts.border;\n }\n\n if (opts.horizontalAlign != null) {\n style.horizontalAlign = opts.horizontalAlign;\n }\n\n if (opts.verticalAlign != null) {\n style.verticalAlign = opts.verticalAlign;\n }\n\n if (opts.numberFormat != null) {\n style.numFmtId = ExcelUtils.convertNumFmtNameToId(opts.numberFormat).toString();\n }\n\n await this._setStyleInternal(style);\n }\n\n //#endregion\n\n //#region Private Methods\n\n private async _deleteCell(addr: ExcelAddressPoint): Promise<void> {\n const wsData = await this._getWsData();\n wsData.deleteCell(addr);\n }\n\n private async _getWsData(): Promise<ExcelXmlWorksheet> {\n return (await this._zipCache.get(`xl/worksheets/${this._targetFileName}`)) as ExcelXmlWorksheet;\n }\n\n private async _setStyleInternal(style: ExcelStyle): Promise<void> {\n const wsData = await this._getWsData();\n const styleData = await this._getOrCreateStyleData();\n let styleId = wsData.getCellStyleId(this.addr);\n if (styleId == null) {\n styleId = styleData.add(style);\n } else {\n styleId = styleData.addWithClone(styleId, style);\n }\n wsData.setCellStyleId(this.addr, styleId);\n }\n\n private async _getTypeData(): Promise<ExcelXmlContentType> {\n return (await this._zipCache.get(\"[Content_Types].xml\")) as ExcelXmlContentType;\n }\n\n private async _getSsData(): Promise<ExcelXmlSharedString | undefined> {\n return (await this._zipCache.get(\"xl/sharedStrings.xml\")) as ExcelXmlSharedString | undefined;\n }\n\n private async _getWbRelData(): Promise<ExcelXmlRelationship> {\n return (await this._zipCache.get(\"xl/_rels/workbook.xml.rels\")) as ExcelXmlRelationship;\n }\n\n private async _getStyleData(): Promise<ExcelXmlStyle | undefined> {\n return (await this._zipCache.get(\"xl/styles.xml\")) as ExcelXmlStyle | undefined;\n }\n\n private async _getOrCreateSsData(): Promise<ExcelXmlSharedString> {\n let ssData = await this._getSsData();\n if (ssData == null) {\n ssData = new ExcelXmlSharedStringClass();\n this._zipCache.set(\"xl/sharedStrings.xml\", ssData);\n\n const typeData = await this._getTypeData();\n typeData.add(\n \"/xl/sharedStrings.xml\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n );\n\n const wbRelData = await this._getWbRelData();\n wbRelData.add(\n \"sharedStrings.xml\",\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n );\n }\n return ssData;\n }\n\n private async _getOrCreateStyleData(): Promise<ExcelXmlStyle> {\n let styleData = await this._getStyleData();\n if (styleData == null) {\n styleData = new ExcelXmlStyleClass();\n this._zipCache.set(\"xl/styles.xml\", styleData);\n\n const typeData = await this._getTypeData();\n typeData.add(\"/xl/styles.xml\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\");\n\n const wbRelData = await this._getWbRelData();\n wbRelData.add(\"styles.xml\", \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\");\n }\n return styleData;\n }\n\n //#endregion\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,36 @@
1
+ import "@simplysm/core-common";
2
+ import { ExcelCell } from "./excel-cell";
3
+ class ExcelCol {
4
+ constructor(_zipCache, _targetFileName, _c) {
5
+ this._zipCache = _zipCache;
6
+ this._targetFileName = _targetFileName;
7
+ this._c = _c;
8
+ }
9
+ _cellMap = /* @__PURE__ */ new Map();
10
+ /** 행 인덱스에 해당하는 셀 반환 (0-based) */
11
+ cell(r) {
12
+ return this._cellMap.getOrCreate(r, new ExcelCell(this._zipCache, this._targetFileName, r, this._c));
13
+ }
14
+ /** 열의 모든 셀 반환 */
15
+ async getCells() {
16
+ const result = [];
17
+ const wsData = await this._getWsData();
18
+ const range = wsData.range;
19
+ for (let r = range.s.r; r <= range.e.r; r++) {
20
+ result[r] = this.cell(r);
21
+ }
22
+ return result;
23
+ }
24
+ /** 열 너비 설정 */
25
+ async setWidth(size) {
26
+ const wsData = await this._getWsData();
27
+ wsData.setColWidth((this._c + 1).toString(), size.toString());
28
+ }
29
+ async _getWsData() {
30
+ return await this._zipCache.get(`xl/worksheets/${this._targetFileName}`);
31
+ }
32
+ }
33
+ export {
34
+ ExcelCol
35
+ };
36
+ //# sourceMappingURL=excel-col.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/excel-col.ts"],
4
+ "sourcesContent": ["import \"@simplysm/core-common\";\nimport { ExcelCell } from \"./excel-cell\";\nimport type { ExcelXmlWorksheet } from \"./xml/excel-xml-worksheet\";\nimport type { ZipCache } from \"./utils/zip-cache\";\n\n/** Excel \uC6CC\uD06C\uC2DC\uD2B8\uC758 \uC5F4\uC744 \uB098\uD0C0\uB0B4\uB294 \uD074\uB798\uC2A4. \uC140 \uC811\uADFC \uBC0F \uC5F4 \uB108\uBE44 \uC124\uC815 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD55C\uB2E4. */\nexport class ExcelCol {\n private readonly _cellMap = new Map<number, ExcelCell>();\n\n constructor(\n private readonly _zipCache: ZipCache,\n private readonly _targetFileName: string,\n private readonly _c: number,\n ) {}\n\n /** \uD589 \uC778\uB371\uC2A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uC140 \uBC18\uD658 (0-based) */\n cell(r: number): ExcelCell {\n return this._cellMap.getOrCreate(r, new ExcelCell(this._zipCache, this._targetFileName, r, this._c));\n }\n\n /** \uC5F4\uC758 \uBAA8\uB4E0 \uC140 \uBC18\uD658 */\n async getCells(): Promise<ExcelCell[]> {\n const result: ExcelCell[] = [];\n const wsData = await this._getWsData();\n const range = wsData.range;\n\n for (let r = range.s.r; r <= range.e.r; r++) {\n result[r] = this.cell(r);\n }\n\n return result;\n }\n\n /** \uC5F4 \uB108\uBE44 \uC124\uC815 */\n async setWidth(size: number): Promise<void> {\n const wsData = await this._getWsData();\n wsData.setColWidth((this._c + 1).toString(), size.toString());\n }\n\n private async _getWsData(): Promise<ExcelXmlWorksheet> {\n return (await this._zipCache.get(`xl/worksheets/${this._targetFileName}`)) as ExcelXmlWorksheet;\n }\n}\n"],
5
+ "mappings": "AAAA,OAAO;AACP,SAAS,iBAAiB;AAKnB,MAAM,SAAS;AAAA,EAGpB,YACmB,WACA,iBACA,IACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EANc,WAAW,oBAAI,IAAuB;AAAA;AAAA,EASvD,KAAK,GAAsB;AACzB,WAAO,KAAK,SAAS,YAAY,GAAG,IAAI,UAAU,KAAK,WAAW,KAAK,iBAAiB,GAAG,KAAK,EAAE,CAAC;AAAA,EACrG;AAAA;AAAA,EAGA,MAAM,WAAiC;AACrC,UAAM,SAAsB,CAAC;AAC7B,UAAM,SAAS,MAAM,KAAK,WAAW;AACrC,UAAM,QAAQ,OAAO;AAErB,aAAS,IAAI,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,KAAK;AAC3C,aAAO,CAAC,IAAI,KAAK,KAAK,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,SAAS,MAA6B;AAC1C,UAAM,SAAS,MAAM,KAAK,WAAW;AACrC,WAAO,aAAa,KAAK,KAAK,GAAG,SAAS,GAAG,KAAK,SAAS,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAc,aAAyC;AACrD,WAAQ,MAAM,KAAK,UAAU,IAAI,iBAAiB,KAAK,eAAe,EAAE;AAAA,EAC1E;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ import "@simplysm/core-common";
2
+ import { ExcelCell } from "./excel-cell";
3
+ class ExcelRow {
4
+ constructor(_zipCache, _targetFileName, _r) {
5
+ this._zipCache = _zipCache;
6
+ this._targetFileName = _targetFileName;
7
+ this._r = _r;
8
+ }
9
+ _cellMap = /* @__PURE__ */ new Map();
10
+ /** 열 인덱스에 해당하는 셀 반환 (0-based) */
11
+ cell(c) {
12
+ return this._cellMap.getOrCreate(c, new ExcelCell(this._zipCache, this._targetFileName, this._r, c));
13
+ }
14
+ /** 행의 모든 셀 반환 */
15
+ async getCells() {
16
+ const result = [];
17
+ const wsData = await this._getWsData();
18
+ const range = wsData.range;
19
+ for (let c = range.s.c; c <= range.e.c; c++) {
20
+ result[c] = this.cell(c);
21
+ }
22
+ return result;
23
+ }
24
+ async _getWsData() {
25
+ return await this._zipCache.get(`xl/worksheets/${this._targetFileName}`);
26
+ }
27
+ }
28
+ export {
29
+ ExcelRow
30
+ };
31
+ //# sourceMappingURL=excel-row.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/excel-row.ts"],
4
+ "sourcesContent": ["import \"@simplysm/core-common\";\nimport { ExcelCell } from \"./excel-cell\";\nimport type { ExcelXmlWorksheet } from \"./xml/excel-xml-worksheet\";\nimport type { ZipCache } from \"./utils/zip-cache\";\n\n/** Excel \uC6CC\uD06C\uC2DC\uD2B8\uC758 \uD589\uC744 \uB098\uD0C0\uB0B4\uB294 \uD074\uB798\uC2A4. \uC140 \uC811\uADFC \uAE30\uB2A5\uC744 \uC81C\uACF5\uD55C\uB2E4. */\nexport class ExcelRow {\n private readonly _cellMap = new Map<number, ExcelCell>();\n\n constructor(\n private readonly _zipCache: ZipCache,\n private readonly _targetFileName: string,\n private readonly _r: number,\n ) {}\n\n /** \uC5F4 \uC778\uB371\uC2A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uC140 \uBC18\uD658 (0-based) */\n cell(c: number): ExcelCell {\n return this._cellMap.getOrCreate(c, new ExcelCell(this._zipCache, this._targetFileName, this._r, c));\n }\n\n /** \uD589\uC758 \uBAA8\uB4E0 \uC140 \uBC18\uD658 */\n async getCells(): Promise<ExcelCell[]> {\n const result: ExcelCell[] = [];\n const wsData = await this._getWsData();\n const range = wsData.range;\n\n for (let c = range.s.c; c <= range.e.c; c++) {\n result[c] = this.cell(c);\n }\n\n return result;\n }\n\n private async _getWsData(): Promise<ExcelXmlWorksheet> {\n return (await this._zipCache.get(`xl/worksheets/${this._targetFileName}`)) as ExcelXmlWorksheet;\n }\n}\n"],
5
+ "mappings": "AAAA,OAAO;AACP,SAAS,iBAAiB;AAKnB,MAAM,SAAS;AAAA,EAGpB,YACmB,WACA,iBACA,IACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EANc,WAAW,oBAAI,IAAuB;AAAA;AAAA,EASvD,KAAK,GAAsB;AACzB,WAAO,KAAK,SAAS,YAAY,GAAG,IAAI,UAAU,KAAK,WAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAAA,EACrG;AAAA;AAAA,EAGA,MAAM,WAAiC;AACrC,UAAM,SAAsB,CAAC;AAC7B,UAAM,SAAS,MAAM,KAAK,WAAW;AACrC,UAAM,QAAQ,OAAO;AAErB,aAAS,IAAI,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,KAAK;AAC3C,aAAO,CAAC,IAAI,KAAK,KAAK,CAAC;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,aAAyC;AACrD,WAAQ,MAAM,KAAK,UAAU,IAAI,iBAAiB,KAAK,eAAe,EAAE;AAAA,EAC1E;AACF;",
6
+ "names": []
7
+ }