@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.
- package/.cache/typecheck-browser.tsbuildinfo +1 -0
- package/.cache/typecheck-node.tsbuildinfo +1 -0
- package/.cache/typecheck-tests-browser.tsbuildinfo +1 -0
- package/.cache/typecheck-tests-node.tsbuildinfo +1 -0
- package/README.md +491 -0
- package/dist/core-common/src/common.types.d.ts +74 -0
- package/dist/core-common/src/common.types.d.ts.map +1 -0
- package/dist/core-common/src/env.d.ts +6 -0
- package/dist/core-common/src/env.d.ts.map +1 -0
- package/dist/core-common/src/errors/argument-error.d.ts +25 -0
- package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/sd-error.d.ts +27 -0
- package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
- package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
- package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
- package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
- package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
- package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
- package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
- package/dist/core-common/src/features/event-emitter.d.ts +66 -0
- package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
- package/dist/core-common/src/features/serial-queue.d.ts +47 -0
- package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
- package/dist/core-common/src/index.d.ts +32 -0
- package/dist/core-common/src/index.d.ts.map +1 -0
- package/dist/core-common/src/types/date-only.d.ts +152 -0
- package/dist/core-common/src/types/date-only.d.ts.map +1 -0
- package/dist/core-common/src/types/date-time.d.ts +96 -0
- package/dist/core-common/src/types/date-time.d.ts.map +1 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
- package/dist/core-common/src/types/time.d.ts +68 -0
- package/dist/core-common/src/types/time.d.ts.map +1 -0
- package/dist/core-common/src/types/uuid.d.ts +35 -0
- package/dist/core-common/src/types/uuid.d.ts.map +1 -0
- package/dist/core-common/src/utils/bytes.d.ts +51 -0
- package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
- package/dist/core-common/src/utils/date-format.d.ts +90 -0
- package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
- package/dist/core-common/src/utils/json.d.ts +34 -0
- package/dist/core-common/src/utils/json.d.ts.map +1 -0
- package/dist/core-common/src/utils/num.d.ts +60 -0
- package/dist/core-common/src/utils/num.d.ts.map +1 -0
- package/dist/core-common/src/utils/obj.d.ts +258 -0
- package/dist/core-common/src/utils/obj.d.ts.map +1 -0
- package/dist/core-common/src/utils/path.d.ts +23 -0
- package/dist/core-common/src/utils/path.d.ts.map +1 -0
- package/dist/core-common/src/utils/primitive.d.ts +18 -0
- package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
- package/dist/core-common/src/utils/str.d.ts +103 -0
- package/dist/core-common/src/utils/str.d.ts.map +1 -0
- package/dist/core-common/src/utils/template-strings.d.ts +84 -0
- package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
- package/dist/core-common/src/utils/transferable.d.ts +47 -0
- package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
- package/dist/core-common/src/utils/wait.d.ts +19 -0
- package/dist/core-common/src/utils/wait.d.ts.map +1 -0
- package/dist/core-common/src/utils/xml.d.ts +36 -0
- package/dist/core-common/src/utils/xml.d.ts.map +1 -0
- package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
- package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
- package/dist/excel/src/excel-cell.d.ts +68 -0
- package/dist/excel/src/excel-cell.d.ts.map +1 -0
- package/dist/excel/src/excel-col.d.ts +19 -0
- package/dist/excel/src/excel-col.d.ts.map +1 -0
- package/dist/excel/src/excel-row.d.ts +17 -0
- package/dist/excel/src/excel-row.d.ts.map +1 -0
- package/dist/excel/src/excel-workbook.d.ts +66 -0
- package/dist/excel/src/excel-workbook.d.ts.map +1 -0
- package/dist/excel/src/excel-worksheet.d.ts +102 -0
- package/dist/excel/src/excel-worksheet.d.ts.map +1 -0
- package/dist/excel/src/excel-wrapper.d.ts +42 -0
- package/dist/excel/src/excel-wrapper.d.ts.map +1 -0
- package/dist/excel/src/index.d.ts +9 -0
- package/dist/excel/src/index.d.ts.map +1 -0
- package/dist/excel/src/types.d.ts +445 -0
- package/dist/excel/src/types.d.ts.map +1 -0
- package/dist/excel/src/utils/excel-utils.d.ts +50 -0
- package/dist/excel/src/utils/excel-utils.d.ts.map +1 -0
- package/dist/excel/src/utils/zip-cache.d.ts +23 -0
- package/dist/excel/src/utils/zip-cache.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-content-type.d.ts +12 -0
- package/dist/excel/src/xml/excel-xml-content-type.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-drawing.d.ts +26 -0
- package/dist/excel/src/xml/excel-xml-drawing.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-relationship.d.ts +18 -0
- package/dist/excel/src/xml/excel-xml-relationship.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-shared-string.d.ts +19 -0
- package/dist/excel/src/xml/excel-xml-shared-string.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-style.d.ts +31 -0
- package/dist/excel/src/xml/excel-xml-style.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-unknown.d.ts +11 -0
- package/dist/excel/src/xml/excel-xml-unknown.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-workbook.d.ts +22 -0
- package/dist/excel/src/xml/excel-xml-workbook.d.ts.map +1 -0
- package/dist/excel/src/xml/excel-xml-worksheet.d.ts +103 -0
- package/dist/excel/src/xml/excel-xml-worksheet.d.ts.map +1 -0
- package/dist/excel-cell.js +261 -0
- package/dist/excel-cell.js.map +7 -0
- package/dist/excel-col.js +36 -0
- package/dist/excel-col.js.map +7 -0
- package/dist/excel-row.js +31 -0
- package/dist/excel-row.js.map +7 -0
- package/dist/excel-workbook.js +137 -0
- package/dist/excel-workbook.js.map +7 -0
- package/dist/excel-worksheet.js +279 -0
- package/dist/excel-worksheet.js.map +7 -0
- package/dist/excel-wrapper.js +220 -0
- package/dist/excel-wrapper.js.map +7 -0
- package/dist/index.js +9 -15
- package/dist/index.js.map +7 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +7 -0
- package/dist/utils/excel-utils.js +162 -0
- package/dist/utils/excel-utils.js.map +7 -0
- package/dist/utils/zip-cache.js +74 -0
- package/dist/utils/zip-cache.js.map +7 -0
- package/dist/xml/excel-xml-content-type.js +57 -0
- package/dist/xml/excel-xml-content-type.js.map +7 -0
- package/dist/xml/excel-xml-drawing.js +77 -0
- package/dist/xml/excel-xml-drawing.js.map +7 -0
- package/dist/xml/excel-xml-relationship.js +72 -0
- package/dist/xml/excel-xml-relationship.js.map +7 -0
- package/dist/xml/excel-xml-shared-string.js +61 -0
- package/dist/xml/excel-xml-shared-string.js.map +7 -0
- package/dist/xml/excel-xml-style.js +313 -0
- package/dist/xml/excel-xml-style.js.map +7 -0
- package/dist/xml/excel-xml-unknown.js +11 -0
- package/dist/xml/excel-xml-unknown.js.map +7 -0
- package/dist/xml/excel-xml-workbook.js +94 -0
- package/dist/xml/excel-xml-workbook.js.map +7 -0
- package/dist/xml/excel-xml-worksheet.js +405 -0
- package/dist/xml/excel-xml-worksheet.js.map +7 -0
- package/package.json +13 -7
- package/src/excel-cell.ts +326 -0
- package/src/excel-col.ts +43 -0
- package/src/excel-row.ts +37 -0
- package/src/excel-workbook.ts +206 -0
- package/src/excel-worksheet.ts +380 -0
- package/src/excel-wrapper.ts +219 -0
- package/src/index.ts +13 -9
- package/src/types.ts +396 -0
- package/src/utils/excel-utils.ts +201 -0
- package/src/utils/zip-cache.ts +103 -0
- package/src/xml/excel-xml-content-type.ts +64 -0
- package/src/xml/excel-xml-drawing.ts +87 -0
- package/src/xml/excel-xml-relationship.ts +86 -0
- package/src/xml/excel-xml-shared-string.ts +80 -0
- package/src/xml/excel-xml-style.ts +393 -0
- package/src/xml/excel-xml-unknown.ts +11 -0
- package/src/xml/excel-xml-workbook.ts +112 -0
- package/src/xml/excel-xml-worksheet.ts +544 -0
- package/tests/excel-cell.spec.ts +407 -0
- package/tests/excel-col.spec.ts +112 -0
- package/tests/excel-row.spec.ts +71 -0
- package/tests/excel-workbook.spec.ts +166 -0
- package/tests/excel-worksheet.spec.ts +389 -0
- package/tests/excel-wrapper.spec.ts +275 -0
- package/tests/fixtures/logo.png +0 -0
- package/tests/image-insert.spec.ts +188 -0
- package/tests/utils/excel-utils.spec.ts +240 -0
- package/dist/ExcelCell.d.ts +0 -13
- package/dist/ExcelCell.js +0 -161
- package/dist/ExcelCell.js.map +0 -1
- package/dist/ExcelCellStyle.d.ts +0 -31
- package/dist/ExcelCellStyle.js +0 -312
- package/dist/ExcelCellStyle.js.map +0 -1
- package/dist/ExcelColumn.d.ts +0 -8
- package/dist/ExcelColumn.js +0 -49
- package/dist/ExcelColumn.js.map +0 -1
- package/dist/ExcelRow.d.ts +0 -7
- package/dist/ExcelRow.js +0 -21
- package/dist/ExcelRow.js.map +0 -1
- package/dist/ExcelWorkbook.d.ts +0 -24
- package/dist/ExcelWorkbook.js +0 -418
- package/dist/ExcelWorkbook.js.map +0 -1
- package/dist/ExcelWorksheet.d.ts +0 -14
- package/dist/ExcelWorksheet.js +0 -31
- package/dist/ExcelWorksheet.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/utils/ExcelUtils.d.ts +0 -14
- package/dist/utils/ExcelUtils.js +0 -66
- package/dist/utils/ExcelUtils.js.map +0 -1
- package/dist/utils/XmlConvert.d.ts +0 -4
- package/dist/utils/XmlConvert.js +0 -64
- package/dist/utils/XmlConvert.js.map +0 -1
- package/src/ExcelCell.ts +0 -163
- package/src/ExcelCellStyle.ts +0 -297
- package/src/ExcelColumn.ts +0 -46
- package/src/ExcelRow.ts +0 -17
- package/src/ExcelWorkbook.ts +0 -369
- package/src/ExcelWorksheet.ts +0 -27
- package/src/utils/ExcelUtils.ts +0 -68
- package/src/utils/XmlConvert.ts +0 -20
- package/tsconfig.build.json +0 -18
- package/tsconfig.json +0 -18
- package/tslint.json +0 -5
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML 변환 유틸리티
|
|
3
|
+
*/
|
|
4
|
+
import type { XmlBuilderOptions } from "fast-xml-parser";
|
|
5
|
+
/**
|
|
6
|
+
* XML 문자열을 객체로 파싱
|
|
7
|
+
* @param str XML 문자열
|
|
8
|
+
* @param options 옵션
|
|
9
|
+
* @param options.stripTagPrefix 태그 prefix 제거 여부 (namespace)
|
|
10
|
+
* @returns 파싱된 객체. 구조:
|
|
11
|
+
* - 속성: `$` 객체에 그룹화
|
|
12
|
+
* - 텍스트 노드: `_` 키에 저장
|
|
13
|
+
* - 자식 요소: 배열로 변환 (루트 요소 제외)
|
|
14
|
+
* @example
|
|
15
|
+
* xmlParse('<root id="1"><item>hello</item></root>');
|
|
16
|
+
* // { root: { $: { id: "1" }, item: [{ _: "hello" }] } }
|
|
17
|
+
*/
|
|
18
|
+
export declare function xmlParse(str: string, options?: {
|
|
19
|
+
stripTagPrefix?: boolean;
|
|
20
|
+
}): unknown;
|
|
21
|
+
/**
|
|
22
|
+
* 객체를 XML 문자열로 직렬화
|
|
23
|
+
* @param obj 직렬화할 객체
|
|
24
|
+
* @param options fast-xml-parser XmlBuilderOptions (선택)
|
|
25
|
+
* @returns XML 문자열
|
|
26
|
+
* @example
|
|
27
|
+
* xmlStringify({
|
|
28
|
+
* root: {
|
|
29
|
+
* $: { id: "1" },
|
|
30
|
+
* item: [{ _: "hello" }, { _: "world" }],
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
* // '<root id="1"><item>hello</item><item>world</item></root>'
|
|
34
|
+
*/
|
|
35
|
+
export declare function xmlStringify(obj: unknown, options?: XmlBuilderOptions): string;
|
|
36
|
+
//# sourceMappingURL=xml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/xml.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAarF;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAS9E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { Bytes } from "../common.types";
|
|
2
|
+
export interface ZipArchiveProgress {
|
|
3
|
+
fileName: string;
|
|
4
|
+
totalSize: number;
|
|
5
|
+
extractedSize: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* ZIP 아카이브 처리 클래스
|
|
9
|
+
*
|
|
10
|
+
* ZIP 파일의 읽기, 쓰기, 압축/해제를 처리합니다.
|
|
11
|
+
* 내부 캐시를 사용하여 동일 파일의 중복 압축 해제를 방지합니다.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // ZIP 파일 읽기
|
|
15
|
+
* await using archive = new ZipArchive(zipBytes);
|
|
16
|
+
* const content = await archive.get("file.txt");
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // ZIP 파일 생성
|
|
20
|
+
* await using archive = new ZipArchive();
|
|
21
|
+
* archive.write("file.txt", textBytes);
|
|
22
|
+
* archive.write("data.json", jsonBytes);
|
|
23
|
+
* const zipBytes = await archive.compress();
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // 전체 압축 해제 (진행률 표시)
|
|
27
|
+
* await using archive = new ZipArchive(zipBytes);
|
|
28
|
+
* const files = await archive.extractAll((progress) => {
|
|
29
|
+
* console.log(`${progress.fileName}: ${progress.extractedSize}/${progress.totalSize}`);
|
|
30
|
+
* });
|
|
31
|
+
*/
|
|
32
|
+
export declare class ZipArchive {
|
|
33
|
+
private readonly _reader?;
|
|
34
|
+
private readonly _cache;
|
|
35
|
+
private _entries?;
|
|
36
|
+
/**
|
|
37
|
+
* ZipArchive 생성
|
|
38
|
+
* @param data ZIP 데이터 (생략 시 새 아카이브 생성)
|
|
39
|
+
*/
|
|
40
|
+
constructor(data?: Blob | Bytes);
|
|
41
|
+
private _getEntries;
|
|
42
|
+
/**
|
|
43
|
+
* 모든 파일을 압축 해제
|
|
44
|
+
* @param progressCallback 진행률 콜백
|
|
45
|
+
*/
|
|
46
|
+
extractAll(progressCallback?: (progress: ZipArchiveProgress) => void): Promise<Map<string, Bytes | undefined>>;
|
|
47
|
+
/**
|
|
48
|
+
* 특정 파일 압축 해제
|
|
49
|
+
* @param fileName 파일 이름
|
|
50
|
+
*/
|
|
51
|
+
get(fileName: string): Promise<Bytes | undefined>;
|
|
52
|
+
/**
|
|
53
|
+
* 파일 존재 여부 확인
|
|
54
|
+
* @param fileName 파일 이름
|
|
55
|
+
*/
|
|
56
|
+
exists(fileName: string): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* 파일 쓰기 (캐시에 저장)
|
|
59
|
+
* @param fileName 파일 이름
|
|
60
|
+
* @param bytes 파일 내용
|
|
61
|
+
*/
|
|
62
|
+
write(fileName: string, bytes: Bytes): void;
|
|
63
|
+
/**
|
|
64
|
+
* 캐시된 파일들을 ZIP으로 압축
|
|
65
|
+
*
|
|
66
|
+
* @remarks
|
|
67
|
+
* 내부적으로 `extractAll()`을 호출하여 모든 파일을 메모리에 로드한 후 압축합니다.
|
|
68
|
+
* 대용량 ZIP 파일의 경우 메모리 사용량에 주의가 필요합니다.
|
|
69
|
+
*/
|
|
70
|
+
compress(): Promise<Bytes>;
|
|
71
|
+
/**
|
|
72
|
+
* 리더 닫기 및 캐시 정리
|
|
73
|
+
*/
|
|
74
|
+
close(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* await using 지원
|
|
77
|
+
*/
|
|
78
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=sd-zip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sd-zip.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/zip/sd-zip.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,CAA6D;IAE9E;;;OAGG;gBACS,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK;YAUjB,WAAW;IAQzB;;;OAGG;IACG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;IAkDpH;;;OAGG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAwBvD;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhD;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAM3C;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAiBhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ZipCache } from "./utils/zip-cache";
|
|
2
|
+
import type { ExcelAddressPoint, ExcelStyleOptions, ExcelValueType } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Excel 셀을 나타내는 클래스.
|
|
5
|
+
* 값 읽기/쓰기, 수식 설정, 스타일 설정, 셀 병합 등의 기능을 제공한다.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* ## 비동기 메서드 설계
|
|
9
|
+
*
|
|
10
|
+
* `getVal()`, `setVal()` 등 모든 셀 메서드가 `async`인 이유:
|
|
11
|
+
* - 셀 타입에 따라 필요한 XML만 선택적으로 로드한다
|
|
12
|
+
* - 문자열 셀: SharedStrings.xml 로드
|
|
13
|
+
* - 숫자 셀: SharedStrings 로드 안함
|
|
14
|
+
* - 스타일이 있는 셀: Styles.xml 로드
|
|
15
|
+
*
|
|
16
|
+
* 어떤 셀을 읽을지 미리 알 수 없기 때문에 동기 구조로는 구현할 수 없다.
|
|
17
|
+
* 동기 구조로 만들려면 모든 XML을 미리 로드해야 하므로 대용량 파일에서 메모리 문제가 발생한다.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ExcelCell {
|
|
20
|
+
private readonly _zipCache;
|
|
21
|
+
private readonly _targetFileName;
|
|
22
|
+
private readonly _r;
|
|
23
|
+
private readonly _c;
|
|
24
|
+
/** 셀 주소 (0-based 행/열 인덱스) */
|
|
25
|
+
readonly addr: ExcelAddressPoint;
|
|
26
|
+
constructor(_zipCache: ZipCache, _targetFileName: string, _r: number, _c: number);
|
|
27
|
+
/** 셀에 수식 설정 (undefined: 수식 삭제) */
|
|
28
|
+
setFormula(val: string | undefined): Promise<void>;
|
|
29
|
+
/** 셀의 수식 반환 */
|
|
30
|
+
getFormula(): Promise<string | undefined>;
|
|
31
|
+
/** 셀 값 설정 (undefined: 셀 삭제) */
|
|
32
|
+
setVal(val: ExcelValueType): Promise<void>;
|
|
33
|
+
/** 셀 값 반환 */
|
|
34
|
+
getVal(): Promise<ExcelValueType>;
|
|
35
|
+
/**
|
|
36
|
+
* 현재 셀부터 지정된 끝 좌표까지 셀 병합
|
|
37
|
+
* @param r 병합 끝 행 인덱스 (0-based)
|
|
38
|
+
* @param c 병합 끝 열 인덱스 (0-based)
|
|
39
|
+
* @example
|
|
40
|
+
* // A1 셀에서 호출하면 A1:C3 범위 (3행 x 3열)를 병합
|
|
41
|
+
* await ws.cell(0, 0).merge(2, 2);
|
|
42
|
+
*/
|
|
43
|
+
merge(r: number, c: number): Promise<void>;
|
|
44
|
+
/** 셀의 스타일 ID 반환 */
|
|
45
|
+
getStyleId(): Promise<string | undefined>;
|
|
46
|
+
/** 셀의 스타일 ID 설정 */
|
|
47
|
+
setStyleId(styleId: string | undefined): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* 셀 스타일 설정
|
|
50
|
+
* @param opts 스타일 옵션
|
|
51
|
+
* @param opts.background 배경색 (ARGB 형식, 8자리 16진수. 예: "FFFF0000")
|
|
52
|
+
* @param opts.border 테두리 위치 배열 (예: ["left", "right", "top", "bottom"])
|
|
53
|
+
* @param opts.horizontalAlign 가로 정렬 ("left", "center", "right")
|
|
54
|
+
* @param opts.verticalAlign 세로 정렬 ("top", "center", "bottom")
|
|
55
|
+
* @param opts.numberFormat 숫자 형식 ("number", "DateOnly", "DateTime", "Time", "string")
|
|
56
|
+
*/
|
|
57
|
+
setStyle(opts: ExcelStyleOptions): Promise<void>;
|
|
58
|
+
private _deleteCell;
|
|
59
|
+
private _getWsData;
|
|
60
|
+
private _setStyleInternal;
|
|
61
|
+
private _getTypeData;
|
|
62
|
+
private _getSsData;
|
|
63
|
+
private _getWbRelData;
|
|
64
|
+
private _getStyleData;
|
|
65
|
+
private _getOrCreateSsData;
|
|
66
|
+
private _getOrCreateStyleData;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=excel-cell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-cell.d.ts","sourceRoot":"","sources":["../../../src/excel-cell.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAMpF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAS;IAKlB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAPrB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBAGd,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM;IAO7B,kCAAkC;IAC5B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,eAAe;IACT,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK/C,+BAA+B;IACzB,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmChD,aAAa;IACP,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAkFvC;;;;;;;OAOG;IACG,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,mBAAmB;IACb,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK/C,mBAAmB;IACb,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;;;;;;OAQG;IACG,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiCxC,WAAW;YAKX,UAAU;YAIV,iBAAiB;YAYjB,YAAY;YAIZ,UAAU;YAIV,aAAa;YAIb,aAAa;YAIb,kBAAkB;YAqBlB,qBAAqB;CAgBpC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "@simplysm/core-common";
|
|
2
|
+
import { ExcelCell } from "./excel-cell";
|
|
3
|
+
import type { ZipCache } from "./utils/zip-cache";
|
|
4
|
+
/** Excel 워크시트의 열을 나타내는 클래스. 셀 접근 및 열 너비 설정 기능을 제공한다. */
|
|
5
|
+
export declare class ExcelCol {
|
|
6
|
+
private readonly _zipCache;
|
|
7
|
+
private readonly _targetFileName;
|
|
8
|
+
private readonly _c;
|
|
9
|
+
private readonly _cellMap;
|
|
10
|
+
constructor(_zipCache: ZipCache, _targetFileName: string, _c: number);
|
|
11
|
+
/** 행 인덱스에 해당하는 셀 반환 (0-based) */
|
|
12
|
+
cell(r: number): ExcelCell;
|
|
13
|
+
/** 열의 모든 셀 반환 */
|
|
14
|
+
getCells(): Promise<ExcelCell[]>;
|
|
15
|
+
/** 열 너비 설정 */
|
|
16
|
+
setWidth(size: number): Promise<void>;
|
|
17
|
+
private _getWsData;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=excel-col.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-col.d.ts","sourceRoot":"","sources":["../../../src/excel-col.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,wDAAwD;AACxD,qBAAa,QAAQ;IAIjB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE;IALrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAGtC,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM;IAG7B,iCAAiC;IACjC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAI1B,iBAAiB;IACX,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAYtC,cAAc;IACR,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAK7B,UAAU;CAGzB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "@simplysm/core-common";
|
|
2
|
+
import { ExcelCell } from "./excel-cell";
|
|
3
|
+
import type { ZipCache } from "./utils/zip-cache";
|
|
4
|
+
/** Excel 워크시트의 행을 나타내는 클래스. 셀 접근 기능을 제공한다. */
|
|
5
|
+
export declare class ExcelRow {
|
|
6
|
+
private readonly _zipCache;
|
|
7
|
+
private readonly _targetFileName;
|
|
8
|
+
private readonly _r;
|
|
9
|
+
private readonly _cellMap;
|
|
10
|
+
constructor(_zipCache: ZipCache, _targetFileName: string, _r: number);
|
|
11
|
+
/** 열 인덱스에 해당하는 셀 반환 (0-based) */
|
|
12
|
+
cell(c: number): ExcelCell;
|
|
13
|
+
/** 행의 모든 셀 반환 */
|
|
14
|
+
getCells(): Promise<ExcelCell[]>;
|
|
15
|
+
private _getWsData;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=excel-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-row.d.ts","sourceRoot":"","sources":["../../../src/excel-row.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,8CAA8C;AAC9C,qBAAa,QAAQ;IAIjB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE;IALrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAGtC,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM;IAG7B,iCAAiC;IACjC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAI1B,iBAAiB;IACX,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAYxB,UAAU;CAGzB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
+
import { ExcelWorksheet } from "./excel-worksheet";
|
|
3
|
+
import { ZipCache } from "./utils/zip-cache";
|
|
4
|
+
/**
|
|
5
|
+
* Excel 워크북 처리 클래스
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 이 클래스는 내부적으로 ZIP 리소스를 관리합니다.
|
|
9
|
+
* 사용 완료 후 반드시 리소스를 해제해야 합니다.
|
|
10
|
+
*
|
|
11
|
+
* ## 비동기 설계
|
|
12
|
+
*
|
|
13
|
+
* 대용량 Excel 파일의 메모리 효율성을 위해 Lazy Loading 구조를 채택합니다:
|
|
14
|
+
* - ZIP 파일 내부의 XML은 접근 시점에만 읽고 파싱한다
|
|
15
|
+
* - SharedStrings, Styles 등 대용량 XML은 필요할 때만 로드한다
|
|
16
|
+
* - 극단적 케이스(예: SharedStrings가 1TB인 파일에서 숫자 셀 하나만 읽기)에서도 메모리 효율적이다
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // await using 사용 (권장)
|
|
21
|
+
* await using wb = new ExcelWorkbook(bytes);
|
|
22
|
+
* const ws = await wb.getWorksheet(0);
|
|
23
|
+
* // ... 작업 수행
|
|
24
|
+
* // 스코프 종료 시 자동으로 리소스 해제
|
|
25
|
+
*
|
|
26
|
+
* // 또는 try-finally 사용
|
|
27
|
+
* const wb = new ExcelWorkbook(bytes);
|
|
28
|
+
* try {
|
|
29
|
+
* const ws = await wb.getWorksheet(0);
|
|
30
|
+
* // ... 작업 수행
|
|
31
|
+
* } finally {
|
|
32
|
+
* await wb.close();
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class ExcelWorkbook {
|
|
37
|
+
readonly zipCache: ZipCache;
|
|
38
|
+
private readonly _wsMap;
|
|
39
|
+
private _isClosed;
|
|
40
|
+
/**
|
|
41
|
+
* @param arg 기존 Excel 파일 데이터 (Blob 또는 Uint8Array). 생략 시 새 워크북을 생성한다.
|
|
42
|
+
*/
|
|
43
|
+
constructor(arg?: Blob | Bytes);
|
|
44
|
+
private _ensureNotClosed;
|
|
45
|
+
/** 워크북의 모든 워크시트 이름을 반환 */
|
|
46
|
+
getWorksheetNames(): Promise<string[]>;
|
|
47
|
+
/** 새 워크시트를 생성하고 반환 */
|
|
48
|
+
createWorksheet(name: string): Promise<ExcelWorksheet>;
|
|
49
|
+
/** 이름 또는 인덱스(0-based)로 워크시트를 조회 */
|
|
50
|
+
getWorksheet(nameOrIndex: string | number): Promise<ExcelWorksheet>;
|
|
51
|
+
/** 워크북을 바이트 배열로 출력 */
|
|
52
|
+
getBytes(): Promise<Bytes>;
|
|
53
|
+
/** 워크북을 Blob으로 출력 */
|
|
54
|
+
getBlob(): Promise<Blob>;
|
|
55
|
+
/**
|
|
56
|
+
* 워크북 리소스 해제
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* ZIP 리더와 내부 캐시를 정리합니다.
|
|
60
|
+
* 호출 후에는 이 워크북 인스턴스를 사용할 수 없습니다.
|
|
61
|
+
* 이미 닫힌 워크북에 대해 호출해도 안전합니다 (no-op).
|
|
62
|
+
*/
|
|
63
|
+
close(): Promise<void>;
|
|
64
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=excel-workbook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-workbook.d.ts","sourceRoot":"","sources":["../../../src/excel-workbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAO7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;gBACS,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK;IA+B9B,OAAO,CAAC,gBAAgB;IAMxB,0BAA0B;IACpB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM5C,sBAAsB;IAChB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA8B5D,mCAAmC;IAC7B,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuCzE,sBAAsB;IAChB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAKhC,qBAAqB;IACf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
+
import "@simplysm/core-common";
|
|
3
|
+
import type { ExcelCell } from "./excel-cell";
|
|
4
|
+
import { ExcelCol } from "./excel-col";
|
|
5
|
+
import { ExcelRow } from "./excel-row";
|
|
6
|
+
import type { ExcelAddressPoint, ExcelAddressRangePoint, ExcelValueType } from "./types";
|
|
7
|
+
import type { ZipCache } from "./utils/zip-cache";
|
|
8
|
+
/**
|
|
9
|
+
* Excel 워크시트를 나타내는 클래스.
|
|
10
|
+
* 셀 접근, 행/열 복사, 데이터 테이블 처리, 이미지 삽입 등의 기능을 제공한다.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ExcelWorksheet {
|
|
13
|
+
private readonly _zipCache;
|
|
14
|
+
private readonly _relId;
|
|
15
|
+
private readonly _targetFileName;
|
|
16
|
+
private readonly _rowMap;
|
|
17
|
+
private readonly _colMap;
|
|
18
|
+
constructor(_zipCache: ZipCache, _relId: number, _targetFileName: string);
|
|
19
|
+
/** 워크시트 이름 반환 */
|
|
20
|
+
getName(): Promise<string>;
|
|
21
|
+
/** 워크시트 이름 변경 */
|
|
22
|
+
setName(newName: string): Promise<void>;
|
|
23
|
+
/** 행 객체 반환 (0-based) */
|
|
24
|
+
row(r: number): ExcelRow;
|
|
25
|
+
/** 셀 객체 반환 (0-based 행/열) */
|
|
26
|
+
cell(r: number, c: number): ExcelCell;
|
|
27
|
+
/** 열 객체 반환 (0-based) */
|
|
28
|
+
col(c: number): ExcelCol;
|
|
29
|
+
/** 소스 행의 스타일을 타겟 행에 복사 */
|
|
30
|
+
copyRowStyle(srcR: number, targetR: number): Promise<void>;
|
|
31
|
+
/** 소스 셀의 스타일을 타겟 셀에 복사 */
|
|
32
|
+
copyCellStyle(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint): Promise<void>;
|
|
33
|
+
/** 소스 행을 타겟 행에 복사 (덮어쓰기) */
|
|
34
|
+
copyRow(srcR: number, targetR: number): Promise<void>;
|
|
35
|
+
/** 소스 셀을 타겟 셀에 복사 */
|
|
36
|
+
copyCell(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* 소스 행을 타겟 위치에 삽입 복사.
|
|
39
|
+
* 타겟 위치 이하의 기존 행들은 한 칸씩 아래로 밀린다.
|
|
40
|
+
* @param srcR 복사할 소스 행 인덱스 (0-based)
|
|
41
|
+
* @param targetR 삽입할 타겟 행 인덱스 (0-based)
|
|
42
|
+
*/
|
|
43
|
+
insertCopyRow(srcR: number, targetR: number): Promise<void>;
|
|
44
|
+
/** 워크시트의 데이터 범위 반환 */
|
|
45
|
+
getRange(): Promise<ExcelAddressRangePoint>;
|
|
46
|
+
/** 워크시트의 모든 셀을 2차원 배열로 반환 */
|
|
47
|
+
getCells(): Promise<ExcelCell[][]>;
|
|
48
|
+
/**
|
|
49
|
+
* 워크시트 데이터를 테이블(레코드 배열) 형식으로 반환.
|
|
50
|
+
* @param opt.headerRowIndex 헤더 행 인덱스 (기본값: 첫 번째 행)
|
|
51
|
+
* @param opt.checkEndColIndex 데이터 종료를 판단할 열 인덱스. 해당 열이 비어있으면 데이터 끝으로 간주
|
|
52
|
+
* @param opt.usableHeaderNameFn 사용할 헤더를 필터링하는 함수
|
|
53
|
+
*/
|
|
54
|
+
getDataTable(opt?: {
|
|
55
|
+
headerRowIndex?: number;
|
|
56
|
+
checkEndColIndex?: number;
|
|
57
|
+
usableHeaderNameFn?: (headerName: string) => boolean;
|
|
58
|
+
}): Promise<Record<string, ExcelValueType>[]>;
|
|
59
|
+
/**
|
|
60
|
+
* 2차원 배열 데이터를 워크시트에 기록
|
|
61
|
+
* @param matrix 2차원 배열 데이터 (행 우선, 0번 인덱스가 첫 번째 행)
|
|
62
|
+
*/
|
|
63
|
+
setDataMatrix(matrix: ExcelValueType[][]): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 레코드 배열을 워크시트에 기록
|
|
66
|
+
* @param records 레코드 배열. 첫 행에 헤더가 자동 생성되고, 이후 행에 데이터가 기록된다.
|
|
67
|
+
*/
|
|
68
|
+
setRecords(records: Record<string, ExcelValueType>[]): Promise<void>;
|
|
69
|
+
/** 워크시트 확대/축소 비율 설정 (퍼센트) */
|
|
70
|
+
setZoom(percent: number): Promise<void>;
|
|
71
|
+
/** 행/열 틀 고정 설정 */
|
|
72
|
+
setFix(point: {
|
|
73
|
+
r?: number;
|
|
74
|
+
c?: number;
|
|
75
|
+
}): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* 워크시트에 이미지를 삽입.
|
|
78
|
+
* @param opts.bytes 이미지 바이너리 데이터
|
|
79
|
+
* @param opts.ext 이미지 확장자 (png, jpg 등)
|
|
80
|
+
* @param opts.from 이미지 시작 위치 (0-based 행/열 인덱스, rOff/cOff는 EMU 단위 오프셋)
|
|
81
|
+
* @param opts.to 이미지 끝 위치 (생략 시 from 위치에 원본 크기로 삽입)
|
|
82
|
+
*/
|
|
83
|
+
addImage(opts: {
|
|
84
|
+
bytes: Bytes;
|
|
85
|
+
ext: string;
|
|
86
|
+
from: {
|
|
87
|
+
r: number;
|
|
88
|
+
c: number;
|
|
89
|
+
rOff?: number | string;
|
|
90
|
+
cOff?: number | string;
|
|
91
|
+
};
|
|
92
|
+
to?: {
|
|
93
|
+
r: number;
|
|
94
|
+
c: number;
|
|
95
|
+
rOff?: number | string;
|
|
96
|
+
cOff?: number | string;
|
|
97
|
+
};
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
private _getWsData;
|
|
100
|
+
private _getWbData;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=excel-worksheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-worksheet.d.ts","sourceRoot":"","sources":["../../../src/excel-worksheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
+
import { type z } from "zod";
|
|
3
|
+
import { ExcelWorkbook } from "./excel-workbook";
|
|
4
|
+
/**
|
|
5
|
+
* Zod 스키마 기반 Excel 래퍼
|
|
6
|
+
*
|
|
7
|
+
* 스키마에서 타입 정보를 추론하여 타입 안전한 읽기/쓰기 제공
|
|
8
|
+
*/
|
|
9
|
+
export declare class ExcelWrapper<T extends z.ZodObject<z.ZodRawShape>> {
|
|
10
|
+
private readonly _schema;
|
|
11
|
+
private readonly _displayNameMap;
|
|
12
|
+
/**
|
|
13
|
+
* @param _schema Zod 스키마 (레코드 구조 정의)
|
|
14
|
+
* @param _displayNameMap 필드명-표시명 매핑 (Excel 헤더로 사용)
|
|
15
|
+
*/
|
|
16
|
+
constructor(_schema: T, _displayNameMap: Record<keyof z.infer<T>, string>);
|
|
17
|
+
/**
|
|
18
|
+
* Excel 파일 읽기 → 레코드 배열
|
|
19
|
+
*/
|
|
20
|
+
read(file: Bytes | Blob, wsNameOrIndex?: string | number): Promise<z.infer<T>[]>;
|
|
21
|
+
/**
|
|
22
|
+
* 레코드 배열 → Excel 워크북
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* 반환된 워크북은 호출자가 리소스를 관리해야 합니다.
|
|
26
|
+
* `await using`을 사용하거나 작업 완료 후 `close()`를 호출하세요.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* await using wb = await wrapper.write("Sheet1", records);
|
|
31
|
+
* const bytes = await wb.getBytes();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
write(wsName: string, records: Partial<z.infer<T>>[]): Promise<ExcelWorkbook>;
|
|
35
|
+
private _getReverseDisplayNameMap;
|
|
36
|
+
private _convertValue;
|
|
37
|
+
private _unwrapSchema;
|
|
38
|
+
private _getDefaultForSchema;
|
|
39
|
+
private _isRequired;
|
|
40
|
+
private _isBoolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=excel-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-wrapper.d.ts","sourceRoot":"","sources":["../../../src/excel-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,KAAK,CAAC,EAA0E,MAAM,KAAK,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD;;;;GAIG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAM1D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC;;;OAGG;gBAEgB,OAAO,EAAE,CAAC,EACV,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAGpE;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,aAAa,GAAE,MAAM,GAAG,MAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAmDzF;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAoDnF,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;CAMnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export * from "./utils/excel-utils";
|
|
3
|
+
export * from "./excel-cell";
|
|
4
|
+
export * from "./excel-row";
|
|
5
|
+
export * from "./excel-col";
|
|
6
|
+
export * from "./excel-worksheet";
|
|
7
|
+
export * from "./excel-workbook";
|
|
8
|
+
export * from "./excel-wrapper";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,iBAAiB,CAAC"}
|