@simplysm/excel 14.0.48 → 14.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -48
- package/dist/xml/excel-xml-workbook.js +2 -2
- package/dist/xml/excel-xml-workbook.js.map +1 -1
- package/docs/core-classes/excel-cell.md +73 -0
- package/docs/core-classes/excel-col.md +36 -0
- package/docs/core-classes/excel-row.md +34 -0
- package/docs/core-classes/excel-workbook.md +59 -0
- package/docs/core-classes/excel-worksheet.md +139 -0
- package/docs/types/excel-address-point.md +33 -0
- package/docs/types/excel-style-options.md +57 -0
- package/docs/types/excel-value-type.md +28 -0
- package/docs/types/excel-xml-content-type-data.md +23 -0
- package/docs/types/excel-xml-drawing-data.md +29 -0
- package/docs/types/excel-xml-relationship-data.md +39 -0
- package/docs/types/excel-xml-shared-string-data.md +42 -0
- package/docs/types/excel-xml-style-data.md +97 -0
- package/docs/types/excel-xml-workbook-data.md +22 -0
- package/docs/types/excel-xml-worksheet-data.md +68 -0
- package/docs/types/excel-xml.md +15 -0
- package/docs/utilities/excel-utils.md +93 -0
- package/docs/wrapper/excel-wrapper.md +100 -0
- package/package.json +2 -2
- package/src/xml/excel-xml-workbook.ts +2 -2
- package/docs/core-classes.md +0 -453
- package/docs/types.md +0 -459
- package/docs/utilities.md +0 -194
- package/docs/wrapper.md +0 -73
package/README.md
CHANGED
|
@@ -12,63 +12,41 @@ npm install @simplysm/excel
|
|
|
12
12
|
|
|
13
13
|
### Core Classes
|
|
14
14
|
|
|
15
|
-
|
|
|
16
|
-
|
|
17
|
-
| `ExcelWorkbook` | class | Excel 워크북 진입점. 워크시트 생성/조회, 바이트 내보내기, ZIP 리소스 관리 |
|
|
18
|
-
| `ExcelWorksheet` | class | 워크시트. 셀/행/열 접근, 행/셀 복사, 데이터 테이블 읽기, 이미지 삽입, 시트명 변경 |
|
|
19
|
-
| `ExcelCell` | class | 개별 셀. 값/수식 읽기/쓰기, 스타일 설정, 셀 병합 |
|
|
20
|
-
| `ExcelRow` | class | 워크시트 행. 셀 접근, 행 전체 셀 조회 |
|
|
21
|
-
| `ExcelCol` | class | 워크시트 열. 셀 접근, 열 너비 설정 |
|
|
22
|
-
|
|
23
|
-
→ See [docs/core-classes.md](./docs/core-classes.md) for details.
|
|
15
|
+
| Entry | Kind | Description |
|
|
16
|
+
|-------|------|-------------|
|
|
17
|
+
| [`ExcelWorkbook`](./docs/core-classes/excel-workbook.md) | class | Excel 워크북 진입점. 워크시트 생성/조회, 바이트 내보내기, ZIP 리소스 관리 |
|
|
18
|
+
| [`ExcelWorksheet`](./docs/core-classes/excel-worksheet.md) | class | 워크시트. 셀/행/열 접근, 행/셀 복사, 데이터 테이블 읽기, 이미지 삽입, 시트명 변경 |
|
|
19
|
+
| [`ExcelCell`](./docs/core-classes/excel-cell.md) | class | 개별 셀. 값/수식 읽기/쓰기, 스타일 설정, 셀 병합 |
|
|
20
|
+
| [`ExcelRow`](./docs/core-classes/excel-row.md) | class | 워크시트 행. 셀 접근, 행 전체 셀 조회 |
|
|
21
|
+
| [`ExcelCol`](./docs/core-classes/excel-col.md) | class | 워크시트 열. 셀 접근, 열 너비 설정 |
|
|
24
22
|
|
|
25
23
|
### Wrapper
|
|
26
24
|
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
| `ExcelWrapper` | class | Zod 스키마 기반 타입 안전한 Excel 읽기/쓰기. 헤더 자동 생성, 유효성 검사, 필수 필드 강조 |
|
|
30
|
-
|
|
31
|
-
→ See [docs/wrapper.md](./docs/wrapper.md) for details.
|
|
25
|
+
| Entry | Kind | Description |
|
|
26
|
+
|-------|------|-------------|
|
|
27
|
+
| [`ExcelWrapper`](./docs/wrapper/excel-wrapper.md) | class | Zod 스키마 기반 타입 안전한 Excel 읽기/쓰기. 헤더 자동 생성, 유효성 검사, 필수 필드 강조 |
|
|
32
28
|
|
|
33
29
|
### Utilities
|
|
34
30
|
|
|
35
|
-
|
|
|
36
|
-
|
|
37
|
-
| `ExcelUtils` | class | 셀 주소 변환 (좌표↔문자열), 날짜↔숫자 변환, 숫자 형식 매핑 (정적 메서드) |
|
|
38
|
-
|
|
39
|
-
→ See [docs/utilities.md](./docs/utilities.md) for details.
|
|
31
|
+
| Entry | Kind | Description |
|
|
32
|
+
|-------|------|-------------|
|
|
33
|
+
| [`ExcelUtils`](./docs/utilities/excel-utils.md) | class | 셀 주소 변환 (좌표↔문자열), 날짜↔숫자 변환, 숫자 형식 매핑 (정적 메서드) |
|
|
40
34
|
|
|
41
35
|
### Types
|
|
42
36
|
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
| `ExcelValueType` | type | 셀 값 타입: number, string, DateOnly, DateTime, Time, boolean, undefined |
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `ExcelXmlRelationshipData` | interface | `*.rels` 파일 데이터 구조 (내부용) |
|
|
57
|
-
| `ExcelRelationshipData` | interface | 개별 Relationship 엔트리 데이터 (내부용) |
|
|
58
|
-
| `ExcelXmlWorkbookData` | interface | `workbook.xml` 데이터 구조 (내부용) |
|
|
59
|
-
| `ExcelXmlWorksheetData` | interface | `worksheet*.xml` 데이터 구조 (내부용) |
|
|
60
|
-
| `ExcelRowData` | interface | 행 XML 데이터 (내부용) |
|
|
61
|
-
| `ExcelCellData` | interface | 셀 XML 데이터 (내부용) |
|
|
62
|
-
| `ExcelXmlDrawingData` | interface | `drawing*.xml` 데이터 구조 (내부용) |
|
|
63
|
-
| `ExcelXmlSharedStringData` | interface | `sharedStrings.xml` 데이터 구조 (내부용) |
|
|
64
|
-
| `ExcelXmlSharedStringDataSi` | type | SharedString 개별 항목 (단순 텍스트 or rich text) |
|
|
65
|
-
| `ExcelXmlSharedStringDataText` | type | SharedString 텍스트 데이터 (내부용) |
|
|
66
|
-
| `ExcelXmlStyleData` | interface | `styles.xml` 데이터 구조 (내부용) |
|
|
67
|
-
| `ExcelXmlStyleDataXf` | interface | 셀 서식(xf) 데이터 (내부용) |
|
|
68
|
-
| `ExcelXmlStyleDataFill` | interface | 채우기 스타일 데이터 (내부용) |
|
|
69
|
-
| `ExcelXmlStyleDataBorder` | interface | 테두리 스타일 데이터 (내부용) |
|
|
70
|
-
|
|
71
|
-
→ See [docs/types.md](./docs/types.md) for details.
|
|
37
|
+
| Entry | Kind | Description |
|
|
38
|
+
|-------|------|-------------|
|
|
39
|
+
| [`ExcelValueType`](./docs/types/excel-value-type.md) | type | 셀 값 타입: number, string, DateOnly, DateTime, Time, boolean, undefined. `ExcelCellType` 포함 |
|
|
40
|
+
| [`ExcelAddressPoint`](./docs/types/excel-address-point.md) | interface | 셀 좌표 (0 기반 r, c). `ExcelAddressRangePoint` 포함 |
|
|
41
|
+
| [`ExcelStyleOptions`](./docs/types/excel-style-options.md) | interface | 셀 스타일 옵션 (배경색, 테두리, 정렬, 숫자 형식). `ExcelNumberFormat`, `ExcelBorderPosition`, `ExcelHorizontalAlign`, `ExcelVerticalAlign` 포함 |
|
|
42
|
+
| [`ExcelXml`](./docs/types/excel-xml.md) | interface | XML 처리 클래스가 구현하는 인터페이스 (내부용) |
|
|
43
|
+
| [`ExcelXmlContentTypeData`](./docs/types/excel-xml-content-type-data.md) | interface | `[Content_Types].xml` 데이터 구조 (내부용) |
|
|
44
|
+
| [`ExcelXmlRelationshipData`](./docs/types/excel-xml-relationship-data.md) | interface | `*.rels` 파일 데이터 구조 (내부용). `ExcelRelationshipData` 포함 |
|
|
45
|
+
| [`ExcelXmlWorkbookData`](./docs/types/excel-xml-workbook-data.md) | interface | `workbook.xml` 데이터 구조 (내부용) |
|
|
46
|
+
| [`ExcelXmlWorksheetData`](./docs/types/excel-xml-worksheet-data.md) | interface | `worksheet*.xml` 데이터 구조 (내부용). `ExcelRowData`, `ExcelCellData` 포함 |
|
|
47
|
+
| [`ExcelXmlDrawingData`](./docs/types/excel-xml-drawing-data.md) | interface | `drawing*.xml` 데이터 구조 (내부용) |
|
|
48
|
+
| [`ExcelXmlSharedStringData`](./docs/types/excel-xml-shared-string-data.md) | interface | `sharedStrings.xml` 데이터 구조 (내부용). `ExcelXmlSharedStringDataSi`, `ExcelXmlSharedStringDataText` 포함 |
|
|
49
|
+
| [`ExcelXmlStyleData`](./docs/types/excel-xml-style-data.md) | interface | `styles.xml` 데이터 구조 (내부용). `ExcelXmlStyleDataXf`, `ExcelXmlStyleDataFill`, `ExcelXmlStyleDataBorder` 포함 |
|
|
72
50
|
|
|
73
51
|
## Usage Examples
|
|
74
52
|
|
|
@@ -96,8 +96,8 @@ export class ExcelXmlWorkbook {
|
|
|
96
96
|
return (this.data.workbook.sheets?.[0].sheet ?? []).single((item) => num.parseInt(item.$["r:id"]) === id);
|
|
97
97
|
}
|
|
98
98
|
_getReplacedName(name) {
|
|
99
|
-
//-- 잘못된 시트 이름
|
|
100
|
-
return name.replace(/[:\\/?*\[\]']/g, "
|
|
99
|
+
//-- 잘못된 시트 이름 문자 제거. 전부 제거되어 빈 문자열이 되면 "Sheet" 사용.
|
|
100
|
+
return name.replace(/[:\\/?*\[\]']/g, "") || "Sheet";
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
//# sourceMappingURL=excel-xml-workbook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excel-xml-workbook.js","sourceRoot":"","sources":["../../src/xml/excel-xml-workbook.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"excel-xml-workbook.js","sourceRoot":"","sources":["../../src/xml/excel-xml-workbook.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAG5C;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAC3B,IAAI,CAAuB;IAE3B,YAAY,IAA2B;QACrC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG;gBACV,QAAQ,EAAE;oBACR,CAAC,EAAE;wBACD,OAAO,EAAE,2DAA2D;wBACpE,SAAS,EAAE,qEAAqE;qBACjF;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,WAAW;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvF,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,IAAI,WAAW;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvF,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACtC,CAAC,EAAE;gBACD,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE;gBAChC,MAAM,EAAE,MAAM,UAAU,EAAE;aAC3B;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,MAAM,GAAG,EAAsC,CAAC;QAEtD,qCAAqC;QAErC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAmC,CAAC;QAClE,MAAM,SAAS,GAAG,MAAiC,CAAC;QAEpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,KAAK,WAAW;gBAAE,SAAS;YAElC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;oBACzC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClD,CAAC;gBACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,GAAG,CAAC,QAAQ,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CACpF,MAAM,CACP,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC7B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,oBAAoB,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,oBAAoB,CAAC,EAAU,EAAE,OAAe;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACpD,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;IAClC,CAAC;IAEO,iBAAiB,CAAC,EAAU;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CACxD,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACnC,mDAAmD;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;IACvD,CAAC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# ExcelCell
|
|
2
|
+
|
|
3
|
+
Excel 셀을 나타내는 클래스. 값 읽기/쓰기, 수식, 스타일, 셀 병합 기능을 제공한다.
|
|
4
|
+
|
|
5
|
+
모든 메서드가 `async`인 이유는 셀 타입에 따라 필요한 XML만 선택적으로 로드하는 Lazy Loading 아키텍처 때문이다. 문자열 셀은 `sharedStrings.xml`을 로드하고, 숫자 셀은 로드하지 않는다.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
export class ExcelCell {
|
|
9
|
+
readonly addr: ExcelAddressPoint;
|
|
10
|
+
|
|
11
|
+
constructor(zipCache: ZipCache, targetFileName: string, r: number, c: number);
|
|
12
|
+
|
|
13
|
+
// Value
|
|
14
|
+
async setValue(val: ExcelValueType): Promise<void>;
|
|
15
|
+
async getValue(): Promise<ExcelValueType>;
|
|
16
|
+
async setFormula(val: string | undefined): Promise<void>;
|
|
17
|
+
async getFormula(): Promise<string | undefined>;
|
|
18
|
+
|
|
19
|
+
// Merge
|
|
20
|
+
async merge(r: number, c: number): Promise<void>;
|
|
21
|
+
|
|
22
|
+
// Style
|
|
23
|
+
async getStyleId(): Promise<string | undefined>;
|
|
24
|
+
async setStyleId(styleId: string | undefined): Promise<void>;
|
|
25
|
+
async setStyle(opts: ExcelStyleOptions): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Members
|
|
30
|
+
|
|
31
|
+
| Member | Kind | Type | Description |
|
|
32
|
+
|--------|------|------|-------------|
|
|
33
|
+
| `addr` | property | `ExcelAddressPoint` | 셀 주소 (0 기반 행/열 인덱스, read-only) |
|
|
34
|
+
| `setValue` | method | `(val: ExcelValueType) => Promise<void>` | 셀 값 설정. `undefined` 전달 시 셀 삭제. `DateOnly`/`DateTime`/`Time`은 Excel 날짜 숫자로 변환하고 numFmt 설정 |
|
|
35
|
+
| `getValue` | method | `() => Promise<ExcelValueType>` | 셀 값 반환. 비어있는 셀은 `undefined` 반환. 셀 타입과 스타일에 따라 적절한 JS 타입으로 변환 |
|
|
36
|
+
| `setFormula` | method | `(val: string \| undefined) => Promise<void>` | 셀 수식 설정. `undefined` 전달 시 수식 제거 |
|
|
37
|
+
| `getFormula` | method | `() => Promise<string \| undefined>` | 셀 수식 반환. 수식 없으면 `undefined` 반환 |
|
|
38
|
+
| `merge` | method | `(r: number, c: number) => Promise<void>` | 현재 셀에서 지정된 끝 좌표까지 셀 병합 |
|
|
39
|
+
| `getStyleId` | method | `() => Promise<string \| undefined>` | 셀의 스타일 ID 반환. 스타일 없으면 `undefined` 반환 |
|
|
40
|
+
| `setStyleId` | method | `(styleId: string \| undefined) => Promise<void>` | 셀의 스타일 ID 직접 설정 |
|
|
41
|
+
| `setStyle` | method | `(opts: ExcelStyleOptions) => Promise<void>` | 셀 스타일 설정. 기존 스타일이 있으면 클론 후 병합 |
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// 값 설정/읽기
|
|
47
|
+
await ws.cell(0, 0).setValue("텍스트");
|
|
48
|
+
await ws.cell(0, 1).setValue(42);
|
|
49
|
+
await ws.cell(0, 2).setValue(new DateOnly(2024, 6, 15));
|
|
50
|
+
await ws.cell(0, 3).setValue(true);
|
|
51
|
+
await ws.cell(0, 4).setValue(undefined); // 셀 삭제
|
|
52
|
+
|
|
53
|
+
const val = await ws.cell(0, 0).getValue(); // "텍스트"
|
|
54
|
+
|
|
55
|
+
// 수식
|
|
56
|
+
await ws.cell(1, 0).setFormula("SUM(A1:A10)");
|
|
57
|
+
const formula = await ws.cell(1, 0).getFormula(); // "SUM(A1:A10)"
|
|
58
|
+
|
|
59
|
+
// 셀 병합 (A1:C3 병합)
|
|
60
|
+
await ws.cell(0, 0).merge(2, 2);
|
|
61
|
+
|
|
62
|
+
// 스타일
|
|
63
|
+
await ws.cell(0, 0).setStyle({
|
|
64
|
+
background: "00FFFF00", // 노란색 배경
|
|
65
|
+
border: ["left", "right", "top", "bottom"],
|
|
66
|
+
horizontalAlign: "center",
|
|
67
|
+
verticalAlign: "center",
|
|
68
|
+
numberFormat: "number",
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// 커스텀 formatCode
|
|
72
|
+
await ws.cell(0, 0).setStyle({ numberFormatCode: "0.000000" });
|
|
73
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# ExcelCol
|
|
2
|
+
|
|
3
|
+
Excel 워크시트의 열을 나타내는 클래스. 셀 접근 및 열 너비 설정 기능을 제공한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class ExcelCol {
|
|
7
|
+
constructor(zipCache: ZipCache, targetFileName: string, c: number, cellFactory: (r: number) => ExcelCell);
|
|
8
|
+
|
|
9
|
+
cell(r: number): ExcelCell;
|
|
10
|
+
async getCells(): Promise<ExcelCell[]>;
|
|
11
|
+
async setWidth(size: number): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Members
|
|
16
|
+
|
|
17
|
+
| Member | Kind | Type | Description |
|
|
18
|
+
|--------|------|------|-------------|
|
|
19
|
+
| `cell` | method | `(r: number) => ExcelCell` | 지정된 행 인덱스의 셀 반환 (0 기반) |
|
|
20
|
+
| `getCells` | method | `() => Promise<ExcelCell[]>` | 열의 모든 셀 반환. 데이터 범위 내의 모든 행에 대한 셀이 포함된다 |
|
|
21
|
+
| `setWidth` | method | `(size: number) => Promise<void>` | 열 너비 설정 |
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
const col = ws.col(1); // B열
|
|
27
|
+
|
|
28
|
+
// 특정 셀 접근
|
|
29
|
+
const cell = col.cell(0); // B1 셀
|
|
30
|
+
|
|
31
|
+
// 열의 모든 셀
|
|
32
|
+
const cells = await col.getCells();
|
|
33
|
+
|
|
34
|
+
// 열 너비 설정
|
|
35
|
+
await ws.col(0).setWidth(20);
|
|
36
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# ExcelRow
|
|
2
|
+
|
|
3
|
+
Excel 워크시트의 행을 나타내는 클래스. 셀 접근 기능을 제공한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class ExcelRow {
|
|
7
|
+
constructor(zipCache: ZipCache, targetFileName: string, r: number, cellFactory: (c: number) => ExcelCell);
|
|
8
|
+
|
|
9
|
+
cell(c: number): ExcelCell;
|
|
10
|
+
async getCells(): Promise<ExcelCell[]>;
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Members
|
|
15
|
+
|
|
16
|
+
| Member | Kind | Type | Description |
|
|
17
|
+
|--------|------|------|-------------|
|
|
18
|
+
| `cell` | method | `(c: number) => ExcelCell` | 지정된 열 인덱스의 셀 반환 (0 기반) |
|
|
19
|
+
| `getCells` | method | `() => Promise<ExcelCell[]>` | 행의 모든 셀 반환. 데이터 범위 내의 모든 열에 대한 셀이 포함된다 |
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
const row = ws.row(0);
|
|
25
|
+
|
|
26
|
+
// 특정 셀 접근
|
|
27
|
+
const cell = row.cell(2); // C열 셀
|
|
28
|
+
|
|
29
|
+
// 행의 모든 셀
|
|
30
|
+
const cells = await row.getCells();
|
|
31
|
+
for (const cell of cells) {
|
|
32
|
+
const val = await cell.getValue();
|
|
33
|
+
}
|
|
34
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# ExcelWorkbook
|
|
2
|
+
|
|
3
|
+
Excel 워크북 처리 클래스. 내부적으로 ZIP 리소스를 관리하므로 사용 후 반드시 `try-finally` 블록에서 `close()`를 호출해야 한다.
|
|
4
|
+
|
|
5
|
+
대용량 Excel 파일의 메모리 효율을 위해 Lazy Loading 아키텍처를 채택한다. ZIP 내부의 XML은 접근 시점에만 읽고 파싱한다.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
export class ExcelWorkbook {
|
|
9
|
+
readonly zipCache: ZipCache;
|
|
10
|
+
|
|
11
|
+
constructor(arg?: Blob | Bytes);
|
|
12
|
+
|
|
13
|
+
async getWorksheetNames(): Promise<string[]>;
|
|
14
|
+
async addWorksheet(name: string): Promise<ExcelWorksheet>;
|
|
15
|
+
async getWorksheet(nameOrIndex: string | number): Promise<ExcelWorksheet>;
|
|
16
|
+
async toBytes(): Promise<Bytes>;
|
|
17
|
+
async toBlob(): Promise<Blob>;
|
|
18
|
+
async close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Members
|
|
23
|
+
|
|
24
|
+
| Member | Kind | Type | Description |
|
|
25
|
+
|--------|------|------|-------------|
|
|
26
|
+
| `zipCache` | property | `ZipCache` | ZIP 캐시 인스턴스 (read-only) |
|
|
27
|
+
| `constructor` | method | `(arg?: Blob \| Bytes) => ExcelWorkbook` | `arg` 생략 시 새 워크북 생성, 전달 시 기존 파일 읽기 |
|
|
28
|
+
| `getWorksheetNames` | method | `() => Promise<string[]>` | 워크북의 모든 워크시트 이름 반환 |
|
|
29
|
+
| `addWorksheet` | method | `(name: string) => Promise<ExcelWorksheet>` | 새 워크시트 생성하여 반환 |
|
|
30
|
+
| `getWorksheet` | method | `(nameOrIndex: string \| number) => Promise<ExcelWorksheet>` | 이름 또는 0 기반 인덱스로 워크시트 조회. 찾을 수 없으면 에러 발생 |
|
|
31
|
+
| `toBytes` | method | `() => Promise<Bytes>` | 워크북을 `Bytes`(Uint8Array)로 내보내기 |
|
|
32
|
+
| `toBlob` | method | `() => Promise<Blob>` | 워크북을 `Blob`으로 내보내기. MIME 타입: `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |
|
|
33
|
+
| `close` | method | `() => Promise<void>` | ZIP 리더와 내부 캐시 정리. 이미 닫힌 워크북에 대해 호출해도 안전하다 (no-op). 닫힌 후 메서드 호출 시 에러 발생 |
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { ExcelWorkbook } from "@simplysm/excel";
|
|
39
|
+
|
|
40
|
+
// 신규 생성
|
|
41
|
+
const wb = new ExcelWorkbook();
|
|
42
|
+
try {
|
|
43
|
+
const ws = await wb.addWorksheet("Sheet1");
|
|
44
|
+
await ws.cell(0, 0).setValue("값");
|
|
45
|
+
const bytes = await wb.toBytes();
|
|
46
|
+
} finally {
|
|
47
|
+
await wb.close();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// 기존 파일 읽기 (Uint8Array 또는 Blob)
|
|
51
|
+
const wb2 = new ExcelWorkbook(bytes);
|
|
52
|
+
try {
|
|
53
|
+
const ws = await wb2.getWorksheet(0); // 0 기반 인덱스
|
|
54
|
+
const ws2 = await wb2.getWorksheet("Sheet1"); // 시트명으로도 조회 가능
|
|
55
|
+
const names = await wb2.getWorksheetNames();
|
|
56
|
+
} finally {
|
|
57
|
+
await wb2.close();
|
|
58
|
+
}
|
|
59
|
+
```
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# ExcelWorksheet
|
|
2
|
+
|
|
3
|
+
Excel 워크시트를 나타내는 클래스. 셀 접근, 행/열 복사, 데이터 테이블 처리, 이미지 삽입, 뷰 설정 기능을 제공한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class ExcelWorksheet {
|
|
7
|
+
constructor(zipCache: ZipCache, relId: number, targetFileName: string);
|
|
8
|
+
|
|
9
|
+
// Name
|
|
10
|
+
async getName(): Promise<string>;
|
|
11
|
+
async setName(newName: string): Promise<void>;
|
|
12
|
+
|
|
13
|
+
// Cell Access (0 기반)
|
|
14
|
+
row(r: number): ExcelRow;
|
|
15
|
+
cell(r: number, c: number): ExcelCell;
|
|
16
|
+
col(c: number): ExcelCol;
|
|
17
|
+
|
|
18
|
+
// Copy
|
|
19
|
+
async copyRowStyle(srcR: number, targetR: number): Promise<void>;
|
|
20
|
+
async copyCellStyle(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint): Promise<void>;
|
|
21
|
+
async copyRow(srcR: number, targetR: number): Promise<void>;
|
|
22
|
+
async copyCell(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint): Promise<void>;
|
|
23
|
+
async insertCopyRow(srcR: number, targetR: number): Promise<void>;
|
|
24
|
+
|
|
25
|
+
// Range
|
|
26
|
+
async getRange(): Promise<ExcelAddressRangePoint>;
|
|
27
|
+
async getCells(): Promise<ExcelCell[][]>;
|
|
28
|
+
|
|
29
|
+
// Data
|
|
30
|
+
async getDataTable(opt?: {
|
|
31
|
+
headerRowIndex?: number;
|
|
32
|
+
checkEndColIndex?: number;
|
|
33
|
+
usableHeaderNameFn?: (headerName: string) => boolean;
|
|
34
|
+
}): Promise<Record<string, ExcelValueType>[]>;
|
|
35
|
+
async setDataMatrix(matrix: ExcelValueType[][]): Promise<void>;
|
|
36
|
+
async setRecords(records: Record<string, ExcelValueType>[]): Promise<void>;
|
|
37
|
+
|
|
38
|
+
// View
|
|
39
|
+
async setZoom(percent: number): Promise<void>;
|
|
40
|
+
async freezeAt(point: { r?: number; c?: number }): Promise<void>;
|
|
41
|
+
|
|
42
|
+
// Image
|
|
43
|
+
async addImage(opts: {
|
|
44
|
+
bytes: Bytes;
|
|
45
|
+
ext: string;
|
|
46
|
+
from: { r: number; c: number; rOff?: number | string; cOff?: number | string };
|
|
47
|
+
to?: { r: number; c: number; rOff?: number | string; cOff?: number | string };
|
|
48
|
+
}): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Members
|
|
53
|
+
|
|
54
|
+
| Member | Kind | Type | Description |
|
|
55
|
+
|--------|------|------|-------------|
|
|
56
|
+
| `getName` | method | `() => Promise<string>` | 워크시트 이름 반환 |
|
|
57
|
+
| `setName` | method | `(newName: string) => Promise<void>` | 워크시트 이름 변경 |
|
|
58
|
+
| `row` | method | `(r: number) => ExcelRow` | 행 객체 반환 (0 기반) |
|
|
59
|
+
| `cell` | method | `(r: number, c: number) => ExcelCell` | 셀 객체 반환 (0 기반). 동일 좌표에 대해 항상 동일한 인스턴스 반환 |
|
|
60
|
+
| `col` | method | `(c: number) => ExcelCol` | 열 객체 반환 (0 기반) |
|
|
61
|
+
| `copyRowStyle` | method | `(srcR: number, targetR: number) => Promise<void>` | 원본 행의 스타일을 대상 행으로 복사. 데이터 범위 내 모든 열에 적용 |
|
|
62
|
+
| `copyCellStyle` | method | `(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint) => Promise<void>` | 원본 셀의 스타일을 대상 셀로 복사 |
|
|
63
|
+
| `copyRow` | method | `(srcR: number, targetR: number) => Promise<void>` | 원본 행을 대상 행으로 복사 (덮어쓰기) |
|
|
64
|
+
| `copyCell` | method | `(srcAddr: ExcelAddressPoint, targetAddr: ExcelAddressPoint) => Promise<void>` | 원본 셀을 대상 셀로 복사 |
|
|
65
|
+
| `insertCopyRow` | method | `(srcR: number, targetR: number) => Promise<void>` | 원본 행을 대상 위치에 삽입 복사. 대상 이하 행은 한 칸 아래로 이동. 병합 셀 자동 처리 |
|
|
66
|
+
| `getRange` | method | `() => Promise<ExcelAddressRangePoint>` | 워크시트의 데이터 범위 반환 |
|
|
67
|
+
| `getCells` | method | `() => Promise<ExcelCell[][]>` | 모든 셀을 2차원 배열로 반환 |
|
|
68
|
+
| `getDataTable` | method | `(opt?) => Promise<Record<string, ExcelValueType>[]>` | 워크시트 데이터를 테이블(레코드 배열)로 반환 |
|
|
69
|
+
| `setDataMatrix` | method | `(matrix: ExcelValueType[][]) => Promise<void>` | 2차원 배열 데이터를 워크시트에 쓰기 |
|
|
70
|
+
| `setRecords` | method | `(records: Record<string, ExcelValueType>[]) => Promise<void>` | 레코드 배열을 워크시트에 쓰기. 첫 행에 헤더 자동 생성 |
|
|
71
|
+
| `setZoom` | method | `(percent: number) => Promise<void>` | 워크시트 확대/축소 비율 설정 (퍼센트) |
|
|
72
|
+
| `freezeAt` | method | `(point: { r?: number; c?: number }) => Promise<void>` | 행/열 틀 고정 설정 |
|
|
73
|
+
| `addImage` | method | `(opts) => Promise<void>` | 워크시트에 이미지 삽입 |
|
|
74
|
+
|
|
75
|
+
## `getDataTable` Options
|
|
76
|
+
|
|
77
|
+
| Parameter | Type | Description |
|
|
78
|
+
|-----------|------|-------------|
|
|
79
|
+
| `opt.headerRowIndex` | `number \| undefined` | 헤더 행 인덱스 (기본값: 데이터 범위의 시작 행) |
|
|
80
|
+
| `opt.checkEndColIndex` | `number \| undefined` | 데이터 끝을 판단할 열 인덱스. 이 열이 비어있는 행을 만나면 읽기를 중단한다 |
|
|
81
|
+
| `opt.usableHeaderNameFn` | `((headerName: string) => boolean) \| undefined` | 헤더 필터 함수. `false` 반환 시 해당 헤더 제외 |
|
|
82
|
+
|
|
83
|
+
## `addImage` Options
|
|
84
|
+
|
|
85
|
+
| Parameter | Type | Description |
|
|
86
|
+
|-----------|------|-------------|
|
|
87
|
+
| `opts.bytes` | `Bytes` | 이미지 바이너리 데이터 |
|
|
88
|
+
| `opts.ext` | `string` | 이미지 확장자 (예: `"png"`, `"jpg"`) |
|
|
89
|
+
| `opts.from` | `{ r: number; c: number; rOff?: number \| string; cOff?: number \| string }` | 이미지 시작 위치. `r`/`c`는 0 기반 인덱스, `rOff`/`cOff`는 선택적 EMU 오프셋 |
|
|
90
|
+
| `opts.to` | `{ r: number; c: number; rOff?: number \| string; cOff?: number \| string } \| undefined` | 이미지 끝 위치. 생략 시 기본값은 `{ r: from.r + 1, c: from.c + 1 }` |
|
|
91
|
+
|
|
92
|
+
## Usage
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// getDataTable
|
|
96
|
+
const table = await ws.getDataTable();
|
|
97
|
+
// [{ "이름": "김철수", "나이": 30 }, ...]
|
|
98
|
+
|
|
99
|
+
// 특정 행부터 시작하는 경우
|
|
100
|
+
const table2 = await ws.getDataTable({ headerRowIndex: 1 });
|
|
101
|
+
|
|
102
|
+
// 헤더 필터링
|
|
103
|
+
const table3 = await ws.getDataTable({
|
|
104
|
+
usableHeaderNameFn: (name) => !name.startsWith("_"),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// 2차원 배열 쓰기
|
|
108
|
+
await ws.setDataMatrix([
|
|
109
|
+
["이름", "나이"],
|
|
110
|
+
["김철수", 30],
|
|
111
|
+
]);
|
|
112
|
+
|
|
113
|
+
// 레코드 배열 쓰기 (헤더 자동 생성)
|
|
114
|
+
await ws.setRecords([
|
|
115
|
+
{ name: "김철수", age: 30 },
|
|
116
|
+
]);
|
|
117
|
+
|
|
118
|
+
// 행 복사 (스타일 포함)
|
|
119
|
+
await ws.copyRow(0, 5);
|
|
120
|
+
|
|
121
|
+
// 삽입 복사 (기존 행 이동)
|
|
122
|
+
await ws.insertCopyRow(0, 3);
|
|
123
|
+
|
|
124
|
+
// 틀 고정 (2행부터 고정)
|
|
125
|
+
await ws.freezeAt({ r: 1, c: 0 });
|
|
126
|
+
|
|
127
|
+
// 이미지 삽입
|
|
128
|
+
await ws.addImage({
|
|
129
|
+
bytes: imageBytes,
|
|
130
|
+
ext: "png",
|
|
131
|
+
from: { r: 1, c: 1 },
|
|
132
|
+
to: { r: 5, c: 4 },
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## `insertCopyRow` 병합 셀 처리
|
|
137
|
+
|
|
138
|
+
- 삽입 지점을 관통하는 다중행 병합은 자동으로 1행 확장됨
|
|
139
|
+
- 원본 행의 단일행 병합만 대상 행에 복사됨
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ExcelAddressPoint
|
|
2
|
+
|
|
3
|
+
셀 좌표를 나타내는 인터페이스이다. 모든 좌표는 0 기반이다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export interface ExcelAddressPoint {
|
|
7
|
+
r: number;
|
|
8
|
+
c: number;
|
|
9
|
+
}
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Field | Type | Description |
|
|
13
|
+
|-------|------|-------------|
|
|
14
|
+
| `r` | `number` | 행 인덱스 (0 기반) |
|
|
15
|
+
| `c` | `number` | 열 인덱스 (0 기반) |
|
|
16
|
+
|
|
17
|
+
## Related Types
|
|
18
|
+
|
|
19
|
+
### `ExcelAddressRangePoint`
|
|
20
|
+
|
|
21
|
+
셀 범위 좌표를 나타내는 인터페이스이다.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
export interface ExcelAddressRangePoint {
|
|
25
|
+
s: ExcelAddressPoint;
|
|
26
|
+
e: ExcelAddressPoint;
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
| Field | Type | Description |
|
|
31
|
+
|-------|------|-------------|
|
|
32
|
+
| `s` | `ExcelAddressPoint` | 시작 좌표 |
|
|
33
|
+
| `e` | `ExcelAddressPoint` | 끝 좌표 |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ExcelStyleOptions
|
|
2
|
+
|
|
3
|
+
셀 스타일 옵션 인터페이스이다. [`ExcelCell.setStyle()`](../core-classes/excel-cell.md)에서 사용한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export interface ExcelStyleOptions {
|
|
7
|
+
background?: string;
|
|
8
|
+
border?: ExcelBorderPosition[];
|
|
9
|
+
horizontalAlign?: ExcelHorizontalAlign;
|
|
10
|
+
verticalAlign?: ExcelVerticalAlign;
|
|
11
|
+
numberFormat?: ExcelNumberFormat;
|
|
12
|
+
numberFormatCode?: string;
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
| Field | Type | Description |
|
|
17
|
+
|-------|------|-------------|
|
|
18
|
+
| `background` | `string \| undefined` | 배경색 (ARGB 형식, 8자리 16진수. 예: `"00FF0000"` = 빨강. alpha는 반전 값) |
|
|
19
|
+
| `border` | `ExcelBorderPosition[] \| undefined` | 테두리 위치 배열 |
|
|
20
|
+
| `horizontalAlign` | `ExcelHorizontalAlign \| undefined` | 가로 정렬 |
|
|
21
|
+
| `verticalAlign` | `ExcelVerticalAlign \| undefined` | 세로 정렬 |
|
|
22
|
+
| `numberFormat` | `ExcelNumberFormat \| undefined` | 숫자 형식 프리셋 |
|
|
23
|
+
| `numberFormatCode` | `string \| undefined` | 커스텀 Excel formatCode 문자열 (예: `"0.000000"`, `"#,##0.00"`, `"0.00%"`). `numberFormat`과 동시 지정 시 이 필드가 우선 적용된다 |
|
|
24
|
+
|
|
25
|
+
## Related Types
|
|
26
|
+
|
|
27
|
+
### `ExcelNumberFormat`
|
|
28
|
+
|
|
29
|
+
숫자 형식 이름이다. `ExcelStyleOptions.numberFormat`과 [`ExcelUtils`](../utilities/excel-utils.md)의 변환 메서드에서 사용한다.
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
export type ExcelNumberFormat = "number" | "string" | "DateOnly" | "DateTime" | "Time";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### `ExcelBorderPosition`
|
|
36
|
+
|
|
37
|
+
테두리 위치를 나타내는 타입이다.
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
export type ExcelBorderPosition = "left" | "right" | "top" | "bottom";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### `ExcelHorizontalAlign`
|
|
44
|
+
|
|
45
|
+
가로 정렬을 나타내는 타입이다.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
export type ExcelHorizontalAlign = "center" | "left" | "right";
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `ExcelVerticalAlign`
|
|
52
|
+
|
|
53
|
+
세로 정렬을 나타내는 타입이다.
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
export type ExcelVerticalAlign = "center" | "top" | "bottom";
|
|
57
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ExcelValueType
|
|
2
|
+
|
|
3
|
+
셀에 저장할 수 있는 값의 타입이다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export type ExcelValueType = number | string | DateOnly | DateTime | Time | boolean | undefined;
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
`DateOnly`, `DateTime`, `Time`은 `@simplysm/core-common` 패키지에서 가져온다.
|
|
10
|
+
|
|
11
|
+
## Related Types
|
|
12
|
+
|
|
13
|
+
### `ExcelCellType`
|
|
14
|
+
|
|
15
|
+
Excel 셀 타입이다. XML의 `t` 속성에 대응한다.
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
export type ExcelCellType = "s" | "b" | "str" | "n" | "inlineStr" | "e";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
| Value | Description |
|
|
22
|
+
|-------|-------------|
|
|
23
|
+
| `"s"` | 공유 문자열 (SharedString) |
|
|
24
|
+
| `"b"` | boolean |
|
|
25
|
+
| `"str"` | 수식 결과 문자열 |
|
|
26
|
+
| `"n"` | 숫자 |
|
|
27
|
+
| `"inlineStr"` | 인라인 문자열 (서식 있는 텍스트) |
|
|
28
|
+
| `"e"` | 에러 |
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ExcelXmlContentTypeData
|
|
2
|
+
|
|
3
|
+
`[Content_Types].xml` 데이터 구조이다. 내부 구현에 사용된다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export interface ExcelXmlContentTypeData {
|
|
7
|
+
Types: {
|
|
8
|
+
$: { xmlns: string };
|
|
9
|
+
Default: { $: { Extension: string; ContentType: string } }[];
|
|
10
|
+
Override: { $: { PartName: string; ContentType: string } }[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
| Field | Type | Description |
|
|
16
|
+
|-------|------|-------------|
|
|
17
|
+
| `Types.$` | `{ xmlns: string }` | 네임스페이스 |
|
|
18
|
+
| `Types.Default` | `Array` | 확장자별 기본 콘텐트 타입 |
|
|
19
|
+
| `Types.Default[].$.Extension` | `string` | 파일 확장자 |
|
|
20
|
+
| `Types.Default[].$.ContentType` | `string` | MIME 타입 |
|
|
21
|
+
| `Types.Override` | `Array` | 파일별 오버라이드 콘텐트 타입 |
|
|
22
|
+
| `Types.Override[].$.PartName` | `string` | 파일 경로 |
|
|
23
|
+
| `Types.Override[].$.ContentType` | `string` | MIME 타입 |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# ExcelXmlDrawingData
|
|
2
|
+
|
|
3
|
+
`drawing*.xml` 데이터 구조이다. 이미지 앵커 정보를 포함한다. 내부 구현에 사용된다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export interface ExcelXmlDrawingData {
|
|
7
|
+
wsDr: {
|
|
8
|
+
$: { "xmlns": string; "xmlns:a"?: string; "xmlns:r"?: string };
|
|
9
|
+
twoCellAnchor?: {
|
|
10
|
+
from?: { col: string[]; colOff?: string[]; row: string[]; rowOff?: string[] }[];
|
|
11
|
+
to?: { col: string[]; colOff?: string[]; row: string[]; rowOff?: string[] }[];
|
|
12
|
+
pic?: {
|
|
13
|
+
nvPicPr?: { cNvPr?: { $: { id: string; name: string; descr?: string } }[]; cNvPicPr?: Array<{ "a:picLocks"?: Array<{ $: { noChangeAspect?: string } }> }> }[];
|
|
14
|
+
blipFill?: { "a:blip"?: Array<{ $: { "r:embed": string } }>; "a:stretch"?: Array<{ "a:fillRect": unknown[] }> }[];
|
|
15
|
+
spPr?: { "a:xfrm"?: Array<{ "a:off"?: Array<{ $: { x: string; y: string } }>; "a:ext"?: Array<{ $: { cx: string; cy: string } }> }>; "a:prstGeom"?: Array<{ "$": { prst: string }; "a:avLst": unknown[] }> }[];
|
|
16
|
+
}[];
|
|
17
|
+
clientData?: unknown[];
|
|
18
|
+
}[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Field | Type | Description |
|
|
24
|
+
|-------|------|-------------|
|
|
25
|
+
| `wsDr.$` | `object` | 네임스페이스 |
|
|
26
|
+
| `wsDr.twoCellAnchor` | `Array \| undefined` | 두 셀 사이에 앵커된 이미지 목록 |
|
|
27
|
+
| `twoCellAnchor.from` | `Array \| undefined` | 시작 위치 (행/열/오프셋) |
|
|
28
|
+
| `twoCellAnchor.to` | `Array \| undefined` | 끝 위치 (행/열/오프셋) |
|
|
29
|
+
| `twoCellAnchor.pic` | `Array \| undefined` | 이미지 정보 (blip 관계 ID 포함) |
|