rapid-spreadjs 1.0.10 → 1.0.12
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/.markdownlint.json +13 -13
- package/README.md +39 -1
- package/dist/index.cjs.js +56 -93
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +57 -93
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/utils/sheet.d.ts +27 -33
- package/markdownlint-config-schema.json +1596 -1596
- package/package.json +37 -37
- package/rollup.config.js +0 -51
- package/src/index.ts +0 -11
- package/src/types/sheet.ts +0 -38
- package/src/types/wookbook.ts +0 -0
- package/src/utils/common.ts +0 -22
- package/src/utils/sheet.ts +0 -525
- package/src/utils/wookbook.ts +0 -188
- package/tsconfig.json +0 -113
package/.markdownlint.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./markdownlint-config-schema.json",
|
|
3
|
-
"default": true,
|
|
4
|
-
"MD003": false,
|
|
5
|
-
"MD030": false,
|
|
6
|
-
"MD033": false,
|
|
7
|
-
"MD013": false,
|
|
8
|
-
"MD001": false,
|
|
9
|
-
"MD025": false,
|
|
10
|
-
"MD024": false,
|
|
11
|
-
"MD007": { "indent": 4 },
|
|
12
|
-
"no-hard-tabs": false
|
|
13
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./markdownlint-config-schema.json",
|
|
3
|
+
"default": true,
|
|
4
|
+
"MD003": false,
|
|
5
|
+
"MD030": false,
|
|
6
|
+
"MD033": false,
|
|
7
|
+
"MD013": false,
|
|
8
|
+
"MD001": false,
|
|
9
|
+
"MD025": false,
|
|
10
|
+
"MD024": false,
|
|
11
|
+
"MD007": { "indent": 4 },
|
|
12
|
+
"no-hard-tabs": false
|
|
13
|
+
}
|
package/README.md
CHANGED
|
@@ -88,6 +88,44 @@ export type CellModel = {
|
|
|
88
88
|
};
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
+
### 4.1.2、CellWatermarkModel
|
|
92
|
+
|
|
93
|
+
CellWatermarkModel 单元格水印和数据绑定类型,继承 CellModel。
|
|
94
|
+
|
|
95
|
+
具体属性如下所示:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
/**
|
|
99
|
+
* 单元格水印和数据绑定实体
|
|
100
|
+
*/
|
|
101
|
+
export type CellWatermarkModel = CellModel & {
|
|
102
|
+
/** 水印标题内容 */
|
|
103
|
+
title?: string;
|
|
104
|
+
|
|
105
|
+
/** 数据绑定路径的前缀,如:user.name中的user */
|
|
106
|
+
pathPrev?: string;
|
|
107
|
+
|
|
108
|
+
/** 数据绑定路径的字段,如:user.name中的name */
|
|
109
|
+
pathField?: string;
|
|
110
|
+
};
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4.1.3、CellDateModel
|
|
114
|
+
|
|
115
|
+
CellDateModel 单元格日期控件类型,继承 CellModel。
|
|
116
|
+
|
|
117
|
+
具体属性如下所示:
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
/**
|
|
121
|
+
* 单元格日期控件实体
|
|
122
|
+
*/
|
|
123
|
+
export type CellDateModel = CellModel & {
|
|
124
|
+
/** 日期格式化方式,如:yyyy-MM-dd */
|
|
125
|
+
dateFormat?: string;
|
|
126
|
+
};
|
|
127
|
+
```
|
|
128
|
+
|
|
91
129
|
## 4.2、属性说明
|
|
92
130
|
|
|
93
131
|
## 4.2.1、CommonUtils
|
|
@@ -95,7 +133,7 @@ export type CellModel = {
|
|
|
95
133
|
CommonUtils 为公用工具函数属性,该属性下包含以下函数:
|
|
96
134
|
|
|
97
135
|
- getColLetterName:获取列的英文字母;
|
|
98
|
-
-
|
|
136
|
+
- ……
|
|
99
137
|
|
|
100
138
|
## 4.2.2、SheetUtils
|
|
101
139
|
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var rapidUtils = require('rapid-utils');
|
|
3
4
|
var fileSaver = require('file-saver');
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -23,6 +24,7 @@ const CommonUtils = {
|
|
|
23
24
|
},
|
|
24
25
|
};
|
|
25
26
|
|
|
27
|
+
// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 "moduleResolution" 选项设置为 "nodenext",还是要将别名添加到 "paths" 选项中?ts(2792))
|
|
26
28
|
/**
|
|
27
29
|
* SpreadJS工作表工具函数属性
|
|
28
30
|
*/
|
|
@@ -30,14 +32,15 @@ const SheetUtils = {
|
|
|
30
32
|
/**
|
|
31
33
|
* 获取当前活动工作表选中的单元格集合
|
|
32
34
|
* @param spread 工作簿对象
|
|
33
|
-
* @returns 返回选中单元格的集合,格式如:[{row
|
|
35
|
+
* @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
|
|
34
36
|
*/
|
|
35
37
|
getActiveSheetSelectCells: (spread) => {
|
|
36
38
|
const sheet = spread.getActiveSheet();
|
|
37
|
-
|
|
39
|
+
const allCellObjs = sheet.getSelections();
|
|
40
|
+
return allCellObjs;
|
|
38
41
|
},
|
|
39
42
|
/**
|
|
40
|
-
*
|
|
43
|
+
* 设置当前活动工作表某个或某些单元格范围为选中状态
|
|
41
44
|
* @param spread 工作簿对象
|
|
42
45
|
* @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}
|
|
43
46
|
*/
|
|
@@ -51,7 +54,7 @@ const SheetUtils = {
|
|
|
51
54
|
* @param sheet 工作表实例
|
|
52
55
|
* @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]
|
|
53
56
|
* @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)
|
|
54
|
-
* 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
|
|
57
|
+
* @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
|
|
55
58
|
*/
|
|
56
59
|
getAllCellObjsByRanges: (sheet, selectRanges, isMulColOrder = false) => {
|
|
57
60
|
// 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
|
|
@@ -67,11 +70,8 @@ const SheetUtils = {
|
|
|
67
70
|
colCount: itemSpanCell.colCount,
|
|
68
71
|
});
|
|
69
72
|
});
|
|
70
|
-
if (item.row === undefined ||
|
|
71
|
-
|
|
72
|
-
item.rowCount === undefined ||
|
|
73
|
-
item.colCount === undefined) {
|
|
74
|
-
throw new Error("row、col、rowCount、colCount is required.");
|
|
73
|
+
if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {
|
|
74
|
+
throw new Error('row、col、rowCount、colCount is required.');
|
|
75
75
|
}
|
|
76
76
|
// 遍历item中涉及到的所有单元格
|
|
77
77
|
for (let i = item.row; i < +item.row + item.rowCount; i++) {
|
|
@@ -89,28 +89,14 @@ const SheetUtils = {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
// 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)
|
|
95
|
-
allCellObjs.sort((a, b) => {
|
|
96
|
-
if (a.row === undefined ||
|
|
97
|
-
b.row === undefined ||
|
|
98
|
-
a.col === undefined ||
|
|
99
|
-
b.col === undefined) {
|
|
100
|
-
throw new Error("row、col is required.");
|
|
101
|
-
}
|
|
102
|
-
if (a.row == b.row) {
|
|
103
|
-
return a.col - b.col;
|
|
104
|
-
}
|
|
105
|
-
return a.row - b.row;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
92
|
+
// 对所有单元格坐标对象集合进行排序
|
|
93
|
+
allCellObjs = rapidUtils.orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);
|
|
108
94
|
return allCellObjs;
|
|
109
95
|
},
|
|
110
96
|
/**
|
|
111
97
|
* 获取某工作表中所有的单元格坐标对象集合
|
|
112
98
|
* @param sheet 工作表实例
|
|
113
|
-
* 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]
|
|
99
|
+
* @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]
|
|
114
100
|
*/
|
|
115
101
|
getSheetAllCellObjs: (sheet) => {
|
|
116
102
|
// 得到当前Sheet单元格范围
|
|
@@ -127,17 +113,18 @@ const SheetUtils = {
|
|
|
127
113
|
return allCellObjs;
|
|
128
114
|
},
|
|
129
115
|
/**
|
|
130
|
-
*
|
|
116
|
+
* 获取某活动工作表中选中的所有单元格坐标对象集合
|
|
131
117
|
* @param spread 工作簿实例
|
|
132
|
-
*
|
|
118
|
+
* @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)
|
|
119
|
+
* @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]
|
|
133
120
|
*/
|
|
134
|
-
getActiveSheetSelectCellObjs: (spread) => {
|
|
135
|
-
//
|
|
121
|
+
getActiveSheetSelectCellObjs: (spread, isMulColOrder = false) => {
|
|
122
|
+
// 当前活动的Sheet
|
|
136
123
|
const sheet = spread.getActiveSheet();
|
|
137
124
|
// 得到当前Sheet中选择的单元格范围集合
|
|
138
125
|
const curSheetCellRange = sheet.getSelections();
|
|
139
126
|
// 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]
|
|
140
|
-
const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);
|
|
127
|
+
const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);
|
|
141
128
|
return allCellObjs;
|
|
142
129
|
},
|
|
143
130
|
/**
|
|
@@ -153,41 +140,39 @@ const SheetUtils = {
|
|
|
153
140
|
// 先根据getCellType来获取
|
|
154
141
|
const cellType = sheet.getCellType(row, col);
|
|
155
142
|
if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {
|
|
156
|
-
cellTypeName =
|
|
143
|
+
cellTypeName = 'button';
|
|
157
144
|
}
|
|
158
145
|
else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {
|
|
159
|
-
cellTypeName =
|
|
146
|
+
cellTypeName = 'radio';
|
|
160
147
|
}
|
|
161
148
|
else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {
|
|
162
|
-
cellTypeName =
|
|
149
|
+
cellTypeName = 'checkbox';
|
|
163
150
|
}
|
|
164
151
|
else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {
|
|
165
|
-
cellTypeName =
|
|
152
|
+
cellTypeName = 'checkboxList';
|
|
166
153
|
}
|
|
167
154
|
else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {
|
|
168
|
-
cellTypeName =
|
|
155
|
+
cellTypeName = 'hyperLink';
|
|
169
156
|
}
|
|
170
157
|
else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {
|
|
171
|
-
cellTypeName =
|
|
158
|
+
cellTypeName = 'comboBox';
|
|
172
159
|
}
|
|
173
160
|
// 根据getStyle来获取
|
|
174
161
|
if (cellTypeName == undefined || cellTypeName == null) {
|
|
175
162
|
const cellStyle = sheet.getStyle(row, col);
|
|
176
|
-
if (cellStyle &&
|
|
177
|
-
cellStyle.cellButtons
|
|
178
|
-
cellStyle.cellButtons.length > 0) {
|
|
179
|
-
if (cellStyle.cellButtons[0].command == "openDateTimePicker") {
|
|
163
|
+
if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {
|
|
164
|
+
if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {
|
|
180
165
|
if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {
|
|
181
166
|
if (cellStyle.dropDowns[0].option.showDateRange) {
|
|
182
|
-
cellTypeName =
|
|
167
|
+
cellTypeName = 'dateRange';
|
|
183
168
|
}
|
|
184
169
|
else {
|
|
185
|
-
cellTypeName =
|
|
170
|
+
cellTypeName = 'date';
|
|
186
171
|
}
|
|
187
172
|
}
|
|
188
173
|
}
|
|
189
|
-
else if (cellStyle.cellButtons[0].command ==
|
|
190
|
-
cellTypeName =
|
|
174
|
+
else if (cellStyle.cellButtons[0].command == 'openCalculator') {
|
|
175
|
+
cellTypeName = 'calc';
|
|
191
176
|
}
|
|
192
177
|
}
|
|
193
178
|
}
|
|
@@ -210,7 +195,7 @@ const SheetUtils = {
|
|
|
210
195
|
spread.resumePaint();
|
|
211
196
|
},
|
|
212
197
|
/**
|
|
213
|
-
*
|
|
198
|
+
* 设置当前活动工作表中选中的单元格背景颜色
|
|
214
199
|
* @param spread 工作簿实例
|
|
215
200
|
* @param color 背景颜色
|
|
216
201
|
*/
|
|
@@ -224,13 +209,11 @@ const SheetUtils = {
|
|
|
224
209
|
// 循环每个选中的单元格范围
|
|
225
210
|
selections.forEach((sel) => {
|
|
226
211
|
// 批量设置每个选中的单元格范围的背景颜色
|
|
227
|
-
sheet
|
|
228
|
-
.getRange(sel.row, sel.col, sel.rowCount, sel.colCount)
|
|
229
|
-
.backColor(color);
|
|
212
|
+
sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);
|
|
230
213
|
});
|
|
231
214
|
//#endregion
|
|
232
215
|
//#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐
|
|
233
|
-
// //
|
|
216
|
+
// // 当前活动的工作表中所有选择的单元格
|
|
234
217
|
// const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);
|
|
235
218
|
// selectCells.forEach(item => {
|
|
236
219
|
// // 获取单元格对象
|
|
@@ -274,22 +257,14 @@ const SheetUtils = {
|
|
|
274
257
|
*/
|
|
275
258
|
ignoreSheetShowStrs: (GC) => {
|
|
276
259
|
// 忽略的字符串集合
|
|
277
|
-
const ignoreStrs = [
|
|
278
|
-
"#DIV/0!",
|
|
279
|
-
"#VALUE!",
|
|
280
|
-
"#NAME?",
|
|
281
|
-
"#N/A",
|
|
282
|
-
"#NULL!",
|
|
283
|
-
"#NUM!",
|
|
284
|
-
"#REF!",
|
|
285
|
-
];
|
|
260
|
+
const ignoreStrs = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];
|
|
286
261
|
// paint对象
|
|
287
262
|
const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;
|
|
288
263
|
// 重写paint函数
|
|
289
264
|
GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
|
|
290
265
|
// 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串
|
|
291
266
|
if (ignoreStrs.some((item) => item == value)) {
|
|
292
|
-
ignorePaint.call(this, ctx,
|
|
267
|
+
ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);
|
|
293
268
|
}
|
|
294
269
|
else {
|
|
295
270
|
ignorePaint.apply(this, arguments);
|
|
@@ -310,17 +285,17 @@ const SheetUtils = {
|
|
|
310
285
|
* @param colorStr 辅助线颜色(默认为:#409eff)
|
|
311
286
|
* @param isHb 是否为横表(默认为:false)
|
|
312
287
|
*/
|
|
313
|
-
setSheetAuxiliaryLine: (GC, sheet, width, height, lineWidth = 1, colorStr =
|
|
288
|
+
setSheetAuxiliaryLine: (GC, sheet, width, height, lineWidth = 1, colorStr = '#409eff', isHb = false) => {
|
|
314
289
|
// 创建底部和右侧的浮动对象
|
|
315
|
-
let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ?
|
|
290
|
+
let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth), floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);
|
|
316
291
|
// 创建底部和右侧的div对象
|
|
317
|
-
let divBottom = document.createElement(
|
|
292
|
+
let divBottom = document.createElement('div'), divRight = document.createElement('div');
|
|
318
293
|
// 设置底部div对象样式
|
|
319
294
|
divBottom.style.width = `${width}px`;
|
|
320
|
-
divBottom.style.height =
|
|
295
|
+
divBottom.style.height = '1px';
|
|
321
296
|
divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;
|
|
322
297
|
// 设置右侧div对象样式
|
|
323
|
-
divRight.style.width =
|
|
298
|
+
divRight.style.width = '1px';
|
|
324
299
|
divRight.style.height = `${height}px`;
|
|
325
300
|
divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;
|
|
326
301
|
// floatBottom.fixedPosition(true);
|
|
@@ -337,9 +312,9 @@ const SheetUtils = {
|
|
|
337
312
|
sheet.floatingObjects.add(floatRight);
|
|
338
313
|
},
|
|
339
314
|
/**
|
|
340
|
-
*
|
|
315
|
+
* 设置当前活动工作表的水印和数据绑定是否显示
|
|
341
316
|
* @param spread 工作簿实例
|
|
342
|
-
* @param cells 数据绑定单元格配置集合([{ row: number; col: number;
|
|
317
|
+
* @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])
|
|
343
318
|
* @param isShow 是否显示
|
|
344
319
|
*/
|
|
345
320
|
setActiveSheetWatermark: (spread, cells, isShow) => {
|
|
@@ -351,9 +326,7 @@ const SheetUtils = {
|
|
|
351
326
|
sheet.suspendPaint();
|
|
352
327
|
cells.forEach((cell) => {
|
|
353
328
|
// 设置或移除水印标签
|
|
354
|
-
sheet
|
|
355
|
-
.getCell(cell.row, cell.col)
|
|
356
|
-
.watermark(isShow ? `{${cell.title}}` : undefined);
|
|
329
|
+
sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);
|
|
357
330
|
// 设置或移除绑定路径
|
|
358
331
|
sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);
|
|
359
332
|
});
|
|
@@ -361,18 +334,17 @@ const SheetUtils = {
|
|
|
361
334
|
sheet.resumePaint();
|
|
362
335
|
},
|
|
363
336
|
/**
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
setSheetCellDate: (GC, sheet, cells) => {
|
|
337
|
+
* 设置某工作表中单元格为日期选择控件
|
|
338
|
+
* @param GC GC对象
|
|
339
|
+
* @param sheet 工作表实例
|
|
340
|
+
* @param cells 单元格集合,格式如:[{
|
|
341
|
+
dateFormat: 'yyyy-MM-dd',
|
|
342
|
+
row: 0,
|
|
343
|
+
col: 0
|
|
344
|
+
}]
|
|
345
|
+
* @param isAutoSize 是否自适应单元格大小(默认为:true)
|
|
346
|
+
*/
|
|
347
|
+
setSheetCellDate: (GC, sheet, cells, isAutoSize = true) => {
|
|
376
348
|
cells.forEach((item, index) => {
|
|
377
349
|
// 先获取单元格样式,否则设置控件后样式会丢失
|
|
378
350
|
let cellStyle = sheet.getStyle(item.row, item.col);
|
|
@@ -382,7 +354,7 @@ const SheetUtils = {
|
|
|
382
354
|
cellStyle.cellButtons = [
|
|
383
355
|
{
|
|
384
356
|
imageType: GC.Spread.Sheets.ButtonImageType.dropdown,
|
|
385
|
-
command:
|
|
357
|
+
command: 'openDateTimePicker',
|
|
386
358
|
// 按钮宽度
|
|
387
359
|
// width: 10,
|
|
388
360
|
},
|
|
@@ -398,20 +370,12 @@ const SheetUtils = {
|
|
|
398
370
|
];
|
|
399
371
|
cellStyle.formatter = item.dateFormat;
|
|
400
372
|
// 是否缩小以适应
|
|
401
|
-
cellStyle.shrinkToFit =
|
|
373
|
+
cellStyle.shrinkToFit = isAutoSize;
|
|
402
374
|
// 设置单元格样式
|
|
403
375
|
sheet.setStyle(item.row, item.col, cellStyle);
|
|
404
376
|
});
|
|
405
377
|
},
|
|
406
378
|
};
|
|
407
|
-
/**
|
|
408
|
-
* 测试的函数
|
|
409
|
-
* @param num 传入的参数
|
|
410
|
-
* @returns 返回传入的参数+1
|
|
411
|
-
*/
|
|
412
|
-
const TestFunc = (num) => {
|
|
413
|
-
return num + 1;
|
|
414
|
-
};
|
|
415
379
|
|
|
416
380
|
// 导出Excel文件所需的第三方包
|
|
417
381
|
/**
|
|
@@ -558,6 +522,5 @@ const WorkbookUtils = {
|
|
|
558
522
|
|
|
559
523
|
exports.CommonUtils = CommonUtils;
|
|
560
524
|
exports.SheetUtils = SheetUtils;
|
|
561
|
-
exports.TestFunc = TestFunc;
|
|
562
525
|
exports.WorkbookUtils = WorkbookUtils;
|
|
563
526
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/wookbook.ts"],"sourcesContent":["/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = \"\";\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from \"../types/sheet\";\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{row:,col:,rowCount:,colCount:}]\r\n */\r\n getActiveSheetSelectCells: (spread: any): Array<CellModel> => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n return sheet.getSelections();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(\r\n cellObj.row,\r\n cellObj.col,\r\n cellObj.rowCount,\r\n cellObj.colCount\r\n );\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (\r\n sheet: any,\r\n selectRanges: Array<CellModel>,\r\n isMulColOrder: boolean = false\r\n ) => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: Array<CellModel> = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (\r\n item.row === undefined ||\r\n item.col === undefined ||\r\n item.rowCount === undefined ||\r\n item.colCount === undefined\r\n ) {\r\n throw new Error(\"row、col、rowCount、colCount is required.\");\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 常规顺序\r\n if (!isMulColOrder) {\r\n // 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)\r\n allCellObjs.sort((a: CellModel, b: CellModel) => {\r\n if (\r\n a.row === undefined ||\r\n b.row === undefined ||\r\n a.col === undefined ||\r\n b.col === undefined\r\n ) {\r\n throw new Error(\"row、col is required.\");\r\n }\r\n\r\n if (a.row == b.row) {\r\n return a.col - b.col;\r\n }\r\n\r\n return a.row - b.row;\r\n });\r\n }\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): Array<CellModel> => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(\r\n sheet,\r\n curSheetCellRange\r\n );\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any): Array<CellModel> => {\r\n // 当前激活的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(\r\n sheet,\r\n curSheetCellRange\r\n );\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (\r\n GC: any,\r\n sheet: any,\r\n row: number,\r\n col: number\r\n ): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = \"button\";\r\n } else if (\r\n cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList\r\n ) {\r\n cellTypeName = \"radio\";\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = \"checkbox\";\r\n } else if (\r\n cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList\r\n ) {\r\n cellTypeName = \"checkboxList\";\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = \"hyperLink\";\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = \"comboBox\";\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (\r\n cellStyle &&\r\n cellStyle.cellButtons &&\r\n cellStyle.cellButtons.length > 0\r\n ) {\r\n if (cellStyle.cellButtons[0].command == \"openDateTimePicker\") {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = \"dateRange\";\r\n } else {\r\n cellTypeName = \"date\";\r\n }\r\n }\r\n } else if (\r\n cellStyle.cellButtons[0].command == \"openCalculator\"\r\n ) {\r\n cellTypeName = \"calc\";\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前激活的工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet\r\n .getRange(sel.row, sel.col, sel.rowCount, sel.colCount)\r\n .backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前激活的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: Array<string> = [\r\n \"#DIV/0!\",\r\n \"#VALUE!\",\r\n \"#NAME?\",\r\n \"#N/A\",\r\n \"#NULL!\",\r\n \"#NUM!\",\r\n \"#REF!\",\r\n ];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (\r\n ctx: any,\r\n value: any,\r\n x: any,\r\n y: any,\r\n w: any,\r\n h: any,\r\n style: any,\r\n options: any\r\n ) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, \"/\", x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = \"#409eff\",\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(\r\n `floatLineBottom${isHb ? \"Hb\" : \"\"}`,\r\n 0,\r\n height,\r\n width,\r\n lineWidth\r\n ),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(\r\n `floatLineRight${isHb ? \"Hb\" : \"\"}`,\r\n width,\r\n 0,\r\n lineWidth,\r\n height\r\n );\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement(\"div\"),\r\n divRight = document.createElement(\"div\");\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = \"1px\";\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = \"1px\";\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前激活工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; rowCount: number; colCount: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (\r\n spread: any,\r\n cells: Array<CellWatermarkModel>,\r\n isShow: boolean\r\n ) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet\r\n .getCell(cell.row, cell.col)\r\n .watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(\r\n cell.row,\r\n cell.col,\r\n isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined\r\n );\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0,\r\n\t\t\trowCount: 1,\r\n\t\t\tcolCount: 1\r\n\t\t}]\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: Array<CellDateModel>) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: \"openDateTimePicker\",\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = true;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n\r\n/**\r\n * 测试的函数\r\n * @param num 传入的参数\r\n * @returns 返回传入的参数+1\r\n */\r\nexport const TestFunc = (num: number) => {\r\n return num + 1;\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some(\r\n (item) => cellFormula.indexOf(item) > -1\r\n )\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["saveAs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/wookbook.ts"],"sourcesContent":["/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = \"\";\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { orderByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["orderByJson","saveAs"],"mappings":"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"}
|
package/dist/index.cjs.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("file-saver");const
|
|
1
|
+
"use strict";var e=require("rapid-utils"),t=require("file-saver");const o={getColLetterName:e=>{e+=1;let t="";for(;e>0;){const o=(e-1)%26;t=String.fromCharCode(o+65)+t,e=Math.floor((e-1)/26)}return t.toUpperCase()}},l={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(t,o,l=!1)=>{let n=[];return o.forEach((e,o)=>{if(t.getSpans(e).forEach(e=>{n.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})}),void 0===e.row||void 0===e.col||void 0===e.rowCount||void 0===e.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=e.row;o<+e.row+e.rowCount;o++)for(let l=e.col;l<e.col+e.colCount;l++){null==t.getSpan(o,l)&&n.push({row:o,col:l,rowCount:1,colCount:1})}}),n=e.orderByJson(n,l?["col","row"]:["row","col"],["asc","asc"]),n},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return l.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:(e,t=!1)=>{const o=e.getActiveSheet(),n=o.getSelections();return l.getAllCellObjsByRanges(o,n,t)},getCellType:(e,t,o,l)=>{let n;const r=t.getCellType(o,l);if(r instanceof e.Spread.Sheets.CellTypes.Button?n="button":r instanceof e.Spread.Sheets.CellTypes.RadioButtonList?n="radio":r instanceof e.Spread.Sheets.CellTypes.CheckBox?n="checkbox":r instanceof e.Spread.Sheets.CellTypes.CheckBoxList?n="checkboxList":r instanceof e.Spread.Sheets.CellTypes.HyperLink?n="hyperLink":r instanceof e.Spread.Sheets.CellTypes.ComboBox&&(n="comboBox"),null==n||null==n){const e=t.getStyle(o,l);e&&e.cellButtons&&e.cellButtons.length>0&&("openDateTimePicker"==e.cellButtons[0].command?e.dropDowns&&e.dropDowns.length>0&&(n=e.dropDowns[0].option.showDateRange?"dateRange":"date"):"openCalculator"==e.cellButtons[0].command&&(n="calc"))}return n},setSheetZoom:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).zoom(t)}e.resumePaint()},setActiveSheetBgColor:(e,t)=>{const o=e.getActiveSheet();o.suspendPaint();l.getActiveSheetSelectCells(e).forEach(e=>{o.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)}),o.resumePaint()},setSheetShowPrintPageLine:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).isPrintLineVisible(t)}e.resumePaint()},ignoreSheetShowStrs:e=>{const t=["#DIV/0!","#VALUE!","#NAME?","#N/A","#NULL!","#NUM!","#REF!"],o=e.Spread.Sheets.CellTypes.Text.prototype.paint;e.Spread.Sheets.CellTypes.Text.prototype.paint=function(e,l,n,r,s,i,a,c){t.some(e=>e==l)?o.call(this,e,"/",n,r,s,i,a,c):o.apply(this,arguments)}},setSheetAuxiliaryLine:(e,t,o,l,n=1,r="#409eff",s=!1)=>{let i=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineBottom"+(s?"Hb":""),0,l,o,n),a=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,n,l),c=document.createElement("div"),u=document.createElement("div");c.style.width=`${o}px`,c.style.height="1px",c.style.borderBottom=`${n}px dashed ${r}`,u.style.width="1px",u.style.height=`${l}px`,u.style.borderLeft=`${n}px dashed ${r}`,i.allowResize(!1),i.allowMove(!1),i.content(c),a.allowResize(!1),a.allowMove(!1),a.content(u),t.floatingObjects.add(i),t.floatingObjects.add(a)},setActiveSheetWatermark:(e,t,o)=>{if(null==t||null==t)return;const l=e.getActiveSheet();l.suspendPaint(),t.forEach(e=>{l.getCell(e.row,e.col).watermark(o?`{${e.title}}`:void 0),l.setBindingPath(e.row,e.col,o?`${e.pathPrev}.${e.pathField}`:void 0)}),l.resumePaint()},setSheetCellDate:(e,t,o,l=!0)=>{o.forEach((o,n)=>{let r=t.getStyle(o.row,o.col);r||(r=new e.Spread.Sheets.Style),r.cellButtons=[{imageType:e.Spread.Sheets.ButtonImageType.dropdown,command:"openDateTimePicker"}],r.dropDowns=[{type:e.Spread.Sheets.DropDownType.dateTimePicker,option:{showTime:!1,showDateRange:!1}}],r.formatter=o.dateFormat,r.shrinkToFit=l,t.setStyle(o.row,o.col,r)})}},n={print:(e,t)=>{const o=t.getSheetCount();for(let l=0;l<o;l++){const o=t.getSheet(l);let n=o.printInfo();n.showRowHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.showColumnHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.rowStart(0),n.rowEnd(o.getRowCount()),n.columnStart(0),n.columnEnd(76),n.margin({top:59.055119999999995,bottom:59.055119999999995,left:98.42520000000002,right:59.055119999999995,header:0,footer:0}),n.paperSize(new e.Spread.Sheets.Print.PaperSize(e.Spread.Sheets.Print.PaperKind.a4)),o.printInfo(n)}t.print()},exportToExcel:(e,o,l="")=>{const n=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new e.Spread.Sheets.Workbook;s.fromJSON(n),s.suspendPaint();const i=s.getSheetCount();for(let e=0;e<i;e++){const t=s.getSheet(e);t.suspendCalcService();for(var a=0;a<t.getRowCount();a++)for(var c=0;c<t.getColumnCount();c++){const e=t.getFormula(a,c);if(null!=e&&null!=e&&r.some(t=>e.indexOf(t)>-1)){const e=t.getValue(a,c);t.getCell(a,c).formula(void 0),t.setValue(a,c,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==l&&(l=s.getSheet(0).name());let u={fileType:e.Spread.Sheets.FileType.excel,includeBindingSource:!0,includeStyles:!0,includeFormulas:!0,saveAsView:!1,rowHeadersAsFrozenColumns:!1,columnHeadersAsFrozenRows:!1,includeAutoMergedCells:!1,includeCalcModelCache:!1,includeUnusedNames:!0,includeEmptyRegionCells:!0};s.export(e=>{t.saveAs(e,`${l}.xlsx`)},()=>{},u),s.destroy()}};exports.CommonUtils=o,exports.SheetUtils=l,exports.WorkbookUtils=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.min.js.map
|