dex-simple-report-excel 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/example/demo.html +34 -0
- package/example/test.js +40 -0
- package/package.json +35 -0
- package/src/index.d.ts +230 -0
- package/src/index.js +1051 -0
- package/test_output.xlsx +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# DexSimpleReportExcel
|
|
2
|
+
|
|
3
|
+
基于 `xlsx-js-style` 的高级 Excel 导出工具,支持多工作表、多级表头、行/列合并、样式配置、序号列、图片链接等功能。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- **多工作表导出**:支持一次性导出多个 Sheet。
|
|
8
|
+
- **复杂表头**:支持多级表头(通过 `columns` 嵌套配置)。
|
|
9
|
+
- **智能合并**:
|
|
10
|
+
- 支持按列值自动合并行(`mergeOptions`)。
|
|
11
|
+
- 支持自定义合并策略(正则、自定义函数)。
|
|
12
|
+
- **样式定制**:
|
|
13
|
+
- 全局/特定样式配置(标题、表头、正文)。
|
|
14
|
+
- 支持字体、颜色、对齐、边框等设置。
|
|
15
|
+
- **图片支持**:自动识别图片 URL 并转换为“查看图片”链接。
|
|
16
|
+
- **序号列**:支持自动生成序号列,并与合并行对齐。
|
|
17
|
+
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install dex-simple-report-excel
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 快速开始
|
|
25
|
+
|
|
26
|
+
### Node.js (ES Module)
|
|
27
|
+
|
|
28
|
+
```javascript
|
|
29
|
+
import { ExcelExporter } from 'dex-simple-report-excel';
|
|
30
|
+
|
|
31
|
+
// 1. 定义数据
|
|
32
|
+
const data = [
|
|
33
|
+
{ dept: '研发部', name: '张三', role: '前端', budget: 10000 },
|
|
34
|
+
{ dept: '研发部', name: '李四', role: '后端', budget: 12000 },
|
|
35
|
+
{ dept: '市场部', name: '王五', role: '销售', budget: 8000 },
|
|
36
|
+
{ dept: '市场部', name: '赵六', role: '推广', budget: 9000 }
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
// 2. 定义列结构
|
|
40
|
+
const columns = [
|
|
41
|
+
{ header: '部门', prop: 'dept', mergeable: true }, // 开启合并
|
|
42
|
+
{ header: '姓名', prop: 'name' },
|
|
43
|
+
{ header: '职位', prop: 'role' },
|
|
44
|
+
{ header: '预算', prop: 'budget' }
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
// 3. 导出
|
|
48
|
+
ExcelExporter.exportExcel({
|
|
49
|
+
fileName: '部门预算表.xlsx',
|
|
50
|
+
sheets: [
|
|
51
|
+
{
|
|
52
|
+
sheetName: 'Q1预算',
|
|
53
|
+
title: '2024年第一季度部门预算表', // 表格大标题
|
|
54
|
+
columns: columns,
|
|
55
|
+
data: data,
|
|
56
|
+
mergeOptions: {
|
|
57
|
+
mergeKey: 'dept', // 按部门合并
|
|
58
|
+
serialNumberColumn: true // 开启序号列
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
styleOptions: {
|
|
63
|
+
title: { fontSize: 20, bold: true, colorRgb: '4472C4' },
|
|
64
|
+
header: { fontSize: 14, bold: true, horizontal: 'center' }
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## API 详细说明
|
|
70
|
+
|
|
71
|
+
### 核心方法
|
|
72
|
+
|
|
73
|
+
#### `ExcelExporter.exportExcel(options)`
|
|
74
|
+
同步导出 Excel 文件。适用于中小规模数据量。
|
|
75
|
+
|
|
76
|
+
#### `ExcelExporter.exportExcelAsync(options)`
|
|
77
|
+
异步导出 Excel 文件。适用于大数据量,内部采用分块处理以避免阻塞主线程。
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### 配置对象说明
|
|
82
|
+
|
|
83
|
+
#### 1. `ExportOptions` (顶层配置)
|
|
84
|
+
|
|
85
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| `sheets` | `SheetOptions[]` | `[]` | **必填**,工作表配置数组 |
|
|
88
|
+
| `fileName` | `string` | `'导出数据.xlsx'` | 导出文件名 |
|
|
89
|
+
| `styleOptions` | `StyleOptions` | `{}` | 全局样式简易配置(推荐) |
|
|
90
|
+
| `defaultStyles` | `DefaultStyles` | `{}` | 底层样式对象直接配置(高级) |
|
|
91
|
+
| `showBorder` | `boolean` | `true` | 是否显示单元格边框 |
|
|
92
|
+
|
|
93
|
+
#### 2. `SheetOptions` (工作表配置)
|
|
94
|
+
|
|
95
|
+
| 属性 | 类型 | 说明 |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| `sheetName` | `string` | 工作表名称(默认 `Sheet1`) |
|
|
98
|
+
| `title` | `string` | 表格大标题,置于首行并整行合并 |
|
|
99
|
+
| `columns` | `ColumnNode[]` | **必填**,列定义(支持嵌套实现多级表头) |
|
|
100
|
+
| `data` | `Object[]` | **必填**,数据源数组 |
|
|
101
|
+
| `mergeOptions` | `MergeOptions` | 行合并配置 |
|
|
102
|
+
| `customOptions` | `CustomOptions` | 高级自定义选项(如行高、列宽等) |
|
|
103
|
+
|
|
104
|
+
#### 3. `ColumnNode` (列定义)
|
|
105
|
+
|
|
106
|
+
| 属性 | 类型 | 说明 |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| `header` | `string` | 表头显示文字 |
|
|
109
|
+
| `prop` | `string` | 数据字段名 |
|
|
110
|
+
| `children` | `ColumnNode[]` | 子表头数组(用于多级表头) |
|
|
111
|
+
| `mergeable` | `boolean` | 是否允许该列参与行合并(需配合 `mergeOptions` 使用) |
|
|
112
|
+
| `hidden` | `boolean` | 是否隐藏该列(隐藏列仍可作为 `mergeKey` 使用) |
|
|
113
|
+
| `cellType` | `'text' \| 'image'` | 单元格类型。`image` 会将 URL 转换为“查看图片”链接 |
|
|
114
|
+
| `width` | `number` | 列宽(字符数) |
|
|
115
|
+
|
|
116
|
+
#### 4. `MergeOptions` (合并配置)
|
|
117
|
+
|
|
118
|
+
用于控制行合并行为(例如:相同部门的行合并在一起)。
|
|
119
|
+
|
|
120
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
121
|
+
| --- | --- | --- | --- |
|
|
122
|
+
| `mergeKey` | `string` | - | **必填**,主要合并依据的字段名 |
|
|
123
|
+
| `rowMerge` | `boolean` | `true` | 是否开启行合并功能 |
|
|
124
|
+
| `mergeNull` | `boolean` | `false` | 是否合并空值(null/undefined) |
|
|
125
|
+
| `excludeColumns` | `string[]` | `[]` | 排除参与合并的列名数组 |
|
|
126
|
+
| `childrenStrict` | `boolean` | `false` | 子级合并是否严格依赖父级(通常用于多级合并) |
|
|
127
|
+
| `mergeChildrenByDefault` | `boolean` | `false` | 是否默认合并所有子列(无需显式设 `mergeable`) |
|
|
128
|
+
| `mergeStrategy` | `'auto' \| 'regex' \| 'custom'` | `'auto'` | 合并策略 |
|
|
129
|
+
| `regex` | `RegExp \| string` | - | 正则表达式(当 strategy='regex' 时使用) |
|
|
130
|
+
| `customComparator` | `Function` | - | 自定义比较函数(当 strategy='custom' 时使用) |
|
|
131
|
+
| `serialNumberColumn` | `boolean` | `false` | 是否开启最左侧序号列 |
|
|
132
|
+
| `serialNumberHeader` | `string` | `'序号'` | 序号列表头名称 |
|
|
133
|
+
| `serialNumberStartAt` | `number` | `1` | 序号起始值 |
|
|
134
|
+
|
|
135
|
+
#### 5. `StyleOptions` (样式配置)
|
|
136
|
+
|
|
137
|
+
用于快速调整表格各部分的视觉样式。
|
|
138
|
+
|
|
139
|
+
| 属性 | 类型 | 说明 |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| `title` | `StyleTuning` | 标题行样式 |
|
|
142
|
+
| `header` | `StyleTuning` | 表头行样式 |
|
|
143
|
+
| `body` | `StyleTuning` | 正文数据行样式 |
|
|
144
|
+
|
|
145
|
+
**`StyleTuning` 对象属性:**
|
|
146
|
+
|
|
147
|
+
- `fontName`: 字体名称(如 "宋体")
|
|
148
|
+
- `fontSize`: 字体大小
|
|
149
|
+
- `bold`: 是否加粗 (boolean)
|
|
150
|
+
- `colorRgb`: 字体颜色 (Hex, 如 "FF0000")
|
|
151
|
+
- `horizontal`: 水平对齐 ('left', 'center', 'right')
|
|
152
|
+
- `vertical`: 垂直对齐 ('top', 'center', 'bottom')
|
|
153
|
+
- `wrapText`: 是否自动换行 (boolean)
|
|
154
|
+
|
|
155
|
+
#### 6. `CustomOptions` (高级选项)
|
|
156
|
+
|
|
157
|
+
| 属性 | 类型 | 说明 |
|
|
158
|
+
| --- | --- | --- |
|
|
159
|
+
| `rowHeights` | `Object` | 行高配置 `{ title: 30, header: 25, dataDefault: 20 }` |
|
|
160
|
+
| `cols` | `Array` | 手动指定列宽配置 `[{ wch: 20 }, { wch: 10 }]` |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 场景示例
|
|
165
|
+
|
|
166
|
+
### 1. 基础多级表头与合并
|
|
167
|
+
|
|
168
|
+
```javascript
|
|
169
|
+
const columns = [
|
|
170
|
+
{ header: '项目编号', prop: 'id', hidden: true }, // 隐藏列,用作合并主键
|
|
171
|
+
{
|
|
172
|
+
header: '项目基本信息',
|
|
173
|
+
children: [
|
|
174
|
+
{ header: '项目名称', prop: 'name', mergeable: true },
|
|
175
|
+
{ header: '负责人', prop: 'owner' }
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
header: '进度详情',
|
|
180
|
+
children: [
|
|
181
|
+
{ header: '阶段', prop: 'phase', mergeable: true },
|
|
182
|
+
{ header: '完成度', prop: 'percent' }
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
];
|
|
186
|
+
|
|
187
|
+
const data = [
|
|
188
|
+
{ id: 1, name: '项目A', owner: 'Alice', phase: '设计', percent: '100%' },
|
|
189
|
+
{ id: 1, name: '项目A', owner: 'Alice', phase: '开发', percent: '50%' },
|
|
190
|
+
{ id: 2, name: '项目B', owner: 'Bob', phase: '测试', percent: '20%' }
|
|
191
|
+
];
|
|
192
|
+
|
|
193
|
+
ExcelExporter.exportExcel({
|
|
194
|
+
sheets: [{
|
|
195
|
+
sheetName: '多级表头示例',
|
|
196
|
+
columns,
|
|
197
|
+
data,
|
|
198
|
+
mergeOptions: {
|
|
199
|
+
mergeKey: 'id', // 按 id 合并
|
|
200
|
+
serialNumberColumn: true // 自动生成序号
|
|
201
|
+
}
|
|
202
|
+
}]
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### 2. 自定义合并策略
|
|
207
|
+
|
|
208
|
+
支持三种合并策略:
|
|
209
|
+
- `'auto'`: 全等比较(默认)。
|
|
210
|
+
- `'regex'`: 正则匹配(例如忽略大小写)。
|
|
211
|
+
- `'custom'`: 完全自定义函数。
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
// 示例:忽略大小写和连字符的合并
|
|
215
|
+
const customComparator = (a, b) => {
|
|
216
|
+
const normalize = str => String(str).replace(/-/g, '').toLowerCase();
|
|
217
|
+
return normalize(a) === normalize(b);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
ExcelExporter.exportExcel({
|
|
221
|
+
sheets: [{
|
|
222
|
+
sheetName: '自定义合并',
|
|
223
|
+
columns: [{ header: '代码', prop: 'code', mergeable: true }, { header: '值', prop: 'value' }],
|
|
224
|
+
data: [
|
|
225
|
+
{ code: 'ABC-01', value: 10 },
|
|
226
|
+
{ code: 'abc01', value: 20 }, // 将与上一行合并
|
|
227
|
+
{ code: 'XYZ-99', value: 30 }
|
|
228
|
+
],
|
|
229
|
+
mergeOptions: {
|
|
230
|
+
mergeKey: 'code',
|
|
231
|
+
mergeStrategy: 'custom',
|
|
232
|
+
customComparator: customComparator
|
|
233
|
+
}
|
|
234
|
+
}]
|
|
235
|
+
});
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### 3. 图片与样式定制
|
|
239
|
+
|
|
240
|
+
```javascript
|
|
241
|
+
ExcelExporter.exportExcel({
|
|
242
|
+
fileName: '图片与样式.xlsx',
|
|
243
|
+
styleOptions: {
|
|
244
|
+
// 标题样式:大号蓝色字
|
|
245
|
+
title: { fontSize: 24, bold: true, colorRgb: '0000FF' },
|
|
246
|
+
// 表头样式:黄色背景(需通过 defaultStyles 深入配置,此处仅演示字体)
|
|
247
|
+
header: { fontSize: 14, bold: true },
|
|
248
|
+
// 正文样式:左对齐
|
|
249
|
+
body: { horizontal: 'left' }
|
|
250
|
+
},
|
|
251
|
+
sheets: [{
|
|
252
|
+
sheetName: '产品图册',
|
|
253
|
+
title: '2024新品展示',
|
|
254
|
+
columns: [
|
|
255
|
+
{ header: '产品名称', prop: 'name' },
|
|
256
|
+
{ header: '产品图片', prop: 'imgUrl', cellType: 'image' } // 自动转为链接
|
|
257
|
+
],
|
|
258
|
+
data: [
|
|
259
|
+
{ name: '运动鞋', imgUrl: 'https://example.com/shoe.jpg' },
|
|
260
|
+
{ name: 'T恤', imgUrl: 'not-a-url' } // 非URL保持原样
|
|
261
|
+
],
|
|
262
|
+
// 自定义行高
|
|
263
|
+
customOptions: {
|
|
264
|
+
rowHeights: {
|
|
265
|
+
title: 40,
|
|
266
|
+
header: 30,
|
|
267
|
+
dataDefault: 50 // 数据行高一点以便展示
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}]
|
|
271
|
+
});
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 注意事项
|
|
275
|
+
|
|
276
|
+
1. **图片导出**:目前仅支持将图片 URL 导出为“查看图片”的超链接文本,不支持直接嵌入图片文件(受限于底层库)。
|
|
277
|
+
2. **序号列**:启用 `serialNumberColumn` 时,序号是基于 `mergeKey` 的分段生成的,并且会与左侧合并行对齐。
|
|
278
|
+
3. **大数据量**:对于超过几千行的数据,建议使用 `exportExcelAsync`,以避免浏览器或 Node.js 进程假死。
|
|
279
|
+
4. **边框**:默认情况下,合并单元格的边框会自动补齐,无需手动处理。
|
|
280
|
+
|
|
281
|
+
## License
|
|
282
|
+
|
|
283
|
+
MIT
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>DexSimpleReportExcel Demo</title>
|
|
7
|
+
<style>
|
|
8
|
+
body { font-family: Arial, sans-serif; padding: 20px; }
|
|
9
|
+
.container { max-width: 800px; margin: 0 auto; }
|
|
10
|
+
code { background: #f4f4f4; padding: 2px 5px; border-radius: 3px; }
|
|
11
|
+
</style>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div class="container">
|
|
15
|
+
<h1>DexSimpleReportExcel Demo</h1>
|
|
16
|
+
<p>This library is designed primarily for Node.js environments or frontend projects using bundlers (Webpack/Vite).</p>
|
|
17
|
+
|
|
18
|
+
<h2>Usage Example (Node.js)</h2>
|
|
19
|
+
<pre><code>
|
|
20
|
+
import { ExcelExporter } from 'dex-simple-report-excel';
|
|
21
|
+
|
|
22
|
+
const sheets = [{
|
|
23
|
+
sheetName: 'Demo',
|
|
24
|
+
columns: [{ header: 'Name', prop: 'name' }],
|
|
25
|
+
data: [{ name: 'Alice' }, { name: 'Bob' }]
|
|
26
|
+
}];
|
|
27
|
+
|
|
28
|
+
ExcelExporter.exportExcel({ sheets });
|
|
29
|
+
</code></pre>
|
|
30
|
+
|
|
31
|
+
<p>See <code>example/test.js</code> for a runnable Node.js example.</p>
|
|
32
|
+
</div>
|
|
33
|
+
</body>
|
|
34
|
+
</html>
|
package/example/test.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ExcelExporter } from '../src/index.js';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
// Create a simple test
|
|
5
|
+
const testExport = () => {
|
|
6
|
+
console.log('Starting export test...');
|
|
7
|
+
|
|
8
|
+
const sheets = [
|
|
9
|
+
{
|
|
10
|
+
sheetName: 'TestSheet',
|
|
11
|
+
title: 'Test Report',
|
|
12
|
+
columns: [
|
|
13
|
+
{ header: 'ID', prop: 'id' },
|
|
14
|
+
{ header: 'Name', prop: 'name' },
|
|
15
|
+
{ header: 'Value', prop: 'value' }
|
|
16
|
+
],
|
|
17
|
+
data: [
|
|
18
|
+
{ id: 1, name: 'Item 1', value: 100 },
|
|
19
|
+
{ id: 2, name: 'Item 2', value: 200 }
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const result = ExcelExporter.exportExcel({
|
|
25
|
+
sheets,
|
|
26
|
+
fileName: 'test_output.xlsx',
|
|
27
|
+
styleOptions: {
|
|
28
|
+
title: { fontSize: 18, bold: true },
|
|
29
|
+
header: { fontSize: 14, bold: true }
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (result) {
|
|
34
|
+
console.log('Export successful! Check test_output.xlsx');
|
|
35
|
+
} else {
|
|
36
|
+
console.error('Export failed.');
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
testExport();
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dex-simple-report-excel",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "DexSimpleReportExcel - 一款敏捷简单的Excel表格前端导出工具,极简API,一键导出,适配前端场景",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"types": "src/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"excel",
|
|
13
|
+
"report",
|
|
14
|
+
"export",
|
|
15
|
+
"导出excel",
|
|
16
|
+
"前端导出excel",
|
|
17
|
+
"excel export",
|
|
18
|
+
"DexSimpleReportExcel",
|
|
19
|
+
"简单excel导出",
|
|
20
|
+
"敏捷导出工具"
|
|
21
|
+
],
|
|
22
|
+
"author": "無彦祖 <baochunsan@163.com>",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"xlsx-js-style": "^1.2.0"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://gitee.com/baochunsan/dex-simple-report-excel.git"
|
|
30
|
+
},
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://gitee.com/baochunsan/dex-simple-report-excel/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://gitee.com/baochunsan/dex-simple-report-excel#readme"
|
|
35
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 样式微调配置
|
|
3
|
+
*/
|
|
4
|
+
export interface StyleTuning {
|
|
5
|
+
/** 字体名称,例如 "宋体", "Arial" */
|
|
6
|
+
fontName?: string;
|
|
7
|
+
/** 字体大小 */
|
|
8
|
+
fontSize?: number;
|
|
9
|
+
/** 是否加粗 */
|
|
10
|
+
bold?: boolean;
|
|
11
|
+
/** 字体颜色 (RGB Hex),例如 "FF0000" */
|
|
12
|
+
colorRgb?: string;
|
|
13
|
+
/** 水平对齐方式 */
|
|
14
|
+
horizontal?: 'left' | 'center' | 'right';
|
|
15
|
+
/** 垂直对齐方式 */
|
|
16
|
+
vertical?: 'top' | 'center' | 'bottom';
|
|
17
|
+
/** 是否自动换行 */
|
|
18
|
+
wrapText?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 全局样式配置选项
|
|
23
|
+
* 用于统一设置标题、表头和正文的样式
|
|
24
|
+
*/
|
|
25
|
+
export interface StyleOptions {
|
|
26
|
+
/** 表格大标题样式 */
|
|
27
|
+
title?: StyleTuning;
|
|
28
|
+
/** 表头样式 */
|
|
29
|
+
header?: StyleTuning;
|
|
30
|
+
/** 正文单元格样式 */
|
|
31
|
+
body?: StyleTuning;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 默认样式对象
|
|
36
|
+
* 直接传递给 xlsx-js-style 的样式对象
|
|
37
|
+
*/
|
|
38
|
+
export interface DefaultStyles {
|
|
39
|
+
/** 默认单元格样式 */
|
|
40
|
+
cellStyle?: object;
|
|
41
|
+
/** 默认表头样式 */
|
|
42
|
+
headCellStyle?: object;
|
|
43
|
+
/** 默认标题样式 */
|
|
44
|
+
titleCellStyle?: object;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 列定义节点
|
|
49
|
+
* 支持多级表头嵌套
|
|
50
|
+
*/
|
|
51
|
+
export interface ColumnNode {
|
|
52
|
+
/** 表头显示文字 */
|
|
53
|
+
header?: string;
|
|
54
|
+
/** 标签(别名,通常同 header) */
|
|
55
|
+
label?: string;
|
|
56
|
+
/** 数据字段属性名 */
|
|
57
|
+
prop?: string;
|
|
58
|
+
/** 是否隐藏该列 */
|
|
59
|
+
hidden?: boolean;
|
|
60
|
+
/** 是否允许该列进行行合并 */
|
|
61
|
+
mergeable?: boolean;
|
|
62
|
+
/** 单元格类型:'text' 为普通文本,'image' 为图片链接 */
|
|
63
|
+
cellType?: 'text' | 'image';
|
|
64
|
+
/** 子表头(用于多级表头) */
|
|
65
|
+
children?: ColumnNode[];
|
|
66
|
+
/** 其他自定义属性 */
|
|
67
|
+
[key: string]: any;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 行合并配置选项
|
|
72
|
+
*/
|
|
73
|
+
export interface MergeOptions {
|
|
74
|
+
/** 主要合并依据的字段名 */
|
|
75
|
+
mergeKey: string;
|
|
76
|
+
/** 是否开启行合并功能 */
|
|
77
|
+
rowMerge?: boolean;
|
|
78
|
+
/** 是否合并空值(即字段值为 null/undefined 时是否参与合并) */
|
|
79
|
+
mergeNull?: boolean;
|
|
80
|
+
/** 排除合并的列名数组 */
|
|
81
|
+
excludeColumns?: string[];
|
|
82
|
+
/** 子级合并是否严格依赖父级(通常用于多级合并) */
|
|
83
|
+
childrenStrict?: boolean;
|
|
84
|
+
/** 是否默认合并子级 */
|
|
85
|
+
mergeChildrenByDefault?: boolean;
|
|
86
|
+
/** 合并策略:'auto' (自动), 'regex' (正则), 'custom' (自定义) */
|
|
87
|
+
mergeStrategy?: 'auto' | 'regex' | 'custom';
|
|
88
|
+
/** 正则表达式配置(当 strategy 为 regex 时使用) */
|
|
89
|
+
regex?: RegExp | string;
|
|
90
|
+
/** 自定义比较函数(当 strategy 为 custom 时使用) */
|
|
91
|
+
customComparator?: (a: any, b: any, rowA?: any, rowB?: any, key?: string) => boolean;
|
|
92
|
+
/** 分块处理大小(用于优化大数据量性能) */
|
|
93
|
+
chunkSize?: number;
|
|
94
|
+
/** 是否添加序号列 */
|
|
95
|
+
serialNumberColumn?: boolean;
|
|
96
|
+
/** 序号列的表头名称 */
|
|
97
|
+
serialNumberHeader?: string;
|
|
98
|
+
/** 序号起始值 */
|
|
99
|
+
serialNumberStartAt?: number;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 行高配置
|
|
104
|
+
*/
|
|
105
|
+
export interface RowHeights {
|
|
106
|
+
/** 标题行高度 */
|
|
107
|
+
title?: number;
|
|
108
|
+
/** 表头行高度 */
|
|
109
|
+
header?: number;
|
|
110
|
+
/** 数据行默认高度 */
|
|
111
|
+
dataDefault?: number;
|
|
112
|
+
/** 指定特定索引行的高度 */
|
|
113
|
+
dataByIndex?: Record<number, number>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* 序号列配置(旧版兼容或特定场景使用)
|
|
118
|
+
*/
|
|
119
|
+
export interface IndexColumn {
|
|
120
|
+
/** 是否启用 */
|
|
121
|
+
enabled?: boolean;
|
|
122
|
+
/** 表头名称 */
|
|
123
|
+
header?: string;
|
|
124
|
+
/** 起始值 */
|
|
125
|
+
startAt?: number;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* 自定义选项
|
|
130
|
+
* 用于传递给 xlsx 处理的底层参数
|
|
131
|
+
*/
|
|
132
|
+
export interface CustomOptions {
|
|
133
|
+
/** 列宽配置 */
|
|
134
|
+
cols?: Array<{ wch: number }>;
|
|
135
|
+
/** 行数据(通常自动生成) */
|
|
136
|
+
rows?: Array<any>;
|
|
137
|
+
/** 字段过滤顺序 */
|
|
138
|
+
filterVal?: string[];
|
|
139
|
+
/** 表头字段 */
|
|
140
|
+
tHeader?: string[];
|
|
141
|
+
/** 是否应用边框 */
|
|
142
|
+
applyBorders?: boolean;
|
|
143
|
+
/** 行高配置 */
|
|
144
|
+
rowHeights?: RowHeights;
|
|
145
|
+
/** 序号列配置 */
|
|
146
|
+
indexColumn?: IndexColumn;
|
|
147
|
+
/** 其他属性 */
|
|
148
|
+
[key: string]: any;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 工作表配置
|
|
153
|
+
*/
|
|
154
|
+
export interface SheetOptions {
|
|
155
|
+
/** 工作表名称 */
|
|
156
|
+
sheetName?: string;
|
|
157
|
+
/** 表格大标题(合并第一行显示) */
|
|
158
|
+
title?: string;
|
|
159
|
+
/** 列定义(支持嵌套) */
|
|
160
|
+
columns: ColumnNode[];
|
|
161
|
+
/** 数据源 */
|
|
162
|
+
data: Array<Record<string, any>>;
|
|
163
|
+
/** 自定义底层选项 */
|
|
164
|
+
customOptions?: CustomOptions;
|
|
165
|
+
/** 合并选项 */
|
|
166
|
+
mergeOptions?: MergeOptions;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* 导出选项
|
|
171
|
+
*/
|
|
172
|
+
export interface ExportOptions {
|
|
173
|
+
/** 工作表列表 */
|
|
174
|
+
sheets: SheetOptions[];
|
|
175
|
+
/** 导出文件名 */
|
|
176
|
+
fileName?: string;
|
|
177
|
+
/** 默认样式配置 */
|
|
178
|
+
defaultStyles?: DefaultStyles;
|
|
179
|
+
/** 是否显示边框 */
|
|
180
|
+
showBorder?: boolean;
|
|
181
|
+
/** 简化的样式配置选项 */
|
|
182
|
+
styleOptions?: StyleOptions;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* 高级 Excel 导出类
|
|
187
|
+
*/
|
|
188
|
+
export class ExcelExporter {
|
|
189
|
+
/**
|
|
190
|
+
* 同步导出 Excel
|
|
191
|
+
* @param options 导出选项
|
|
192
|
+
* @returns 是否成功
|
|
193
|
+
*/
|
|
194
|
+
static exportExcel(options: ExportOptions): boolean;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* 异步导出 Excel
|
|
198
|
+
* @param options 导出选项
|
|
199
|
+
* @returns Promise<是否成功>
|
|
200
|
+
*/
|
|
201
|
+
static exportExcelAsync(options: ExportOptions): Promise<boolean>;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* 同步导出 Excel 函数
|
|
206
|
+
* @param options 导出选项
|
|
207
|
+
*/
|
|
208
|
+
export function exportExcel(options: ExportOptions): boolean;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* 异步导出 Excel 函数
|
|
212
|
+
* @param options 导出选项
|
|
213
|
+
*/
|
|
214
|
+
export function exportExcelAsync(options: ExportOptions): Promise<boolean>;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 格式化 JSON 数据为二维数组
|
|
218
|
+
* @param filterVal 字段顺序
|
|
219
|
+
* @param jsonData 原始数据
|
|
220
|
+
*/
|
|
221
|
+
export function formatJson(filterVal: string[], jsonData: any[]): any[][];
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* 显示警告信息
|
|
225
|
+
* @param message 消息内容
|
|
226
|
+
* @param title 标题
|
|
227
|
+
*/
|
|
228
|
+
export function warning(message: string, title?: string): void;
|
|
229
|
+
|
|
230
|
+
export default ExcelExporter;
|