rapid-spreadjs 1.0.7 → 1.0.8

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 CHANGED
@@ -25,11 +25,99 @@ SpreadJS API 地址:[https://demo.grapecity.com.cn/spreadjs/help/docs/API_docu
25
25
  具体依赖组件如下所示:
26
26
 
27
27
  - file-saver:导出 Excel 文件所需的组件;
28
-
29
28
  - @types/file-saver:导出 Excel 文件所需的类型组件;
30
29
 
31
30
  ---
32
31
 
33
- # 3、使用说明
32
+ # 3、拉取组件
33
+
34
+ 可使用如下命令拉取组件:
35
+
36
+ - pnpm install rapid-spreadjs
37
+ - npm i rapid-spreadjs
38
+ - yarn add rapid-spreadjs
39
+
40
+ ---
41
+
42
+ # 4、使用说明
43
+
44
+ 在组件拉取下来后,我们便可使用该组件中的属性以及函数方法了。
45
+
46
+ **该组件包含的类型如下:**
47
+
48
+ - CellModel:单元格实体;
49
+ - ……
50
+
51
+ **该组件包含的属性如下:**
52
+
53
+ - CommonUtils:公用工具函数属性;
54
+ - SheetUtils:SpreadJS 工作表工具函数属性;
55
+ - WorkbookUtils:SpreadJS 工作簿工具函数属性;
56
+ - ……
57
+
58
+ **该组件包含的函数如下:**
59
+
60
+ - ……
61
+
62
+ ## 4.1、类型说明
63
+
64
+ ### 4.1.1、CellModel
65
+
66
+ CellModel 为单元格实体类型,如用于定义某个单元格的行、列、行数量和列数量等相关属性。
67
+
68
+ 具体属性如下所示:
69
+
70
+ ```ts
71
+ /**
72
+ * 单元格实体
73
+ */
74
+ export type CellModel = {
75
+ /** 行索引 */
76
+ row?: number;
77
+
78
+ /** 列索引 */
79
+ col?: number;
80
+
81
+ /** 行数量 */
82
+ rowCount?: number;
83
+
84
+ /** 列数量 */
85
+ colCount?: number;
86
+ };
87
+ ```
88
+
89
+ ## 4.2、属性说明
90
+
91
+ ## 4.2.1、CommonUtils
92
+
93
+ CommonUtils 为公用工具函数属性,该属性下包含以下函数:
94
+
95
+ - getColLetterName:获取列的英文字母;
96
+ -
97
+
98
+ ## 4.2.2、SheetUtils
99
+
100
+ SheetUtils 为 SpreadJS 工作表工具函数属性,该属性下包含以下函数:
101
+
102
+ - getActiveSheetSelectCells:获取当前活动工作表选中的单元格集合;
103
+ - setActiveSheetSelectCells:设置当前活动工作表某个单元格范围为选中状态;
104
+ - getAllCellObjsByRanges:获取某工作表中某范围集合中所有的单元格坐标对象集合;
105
+ - getSheetAllCellObjs:获取某工作表中所有的单元格坐标对象集合;
106
+ - getActiveSheetSelectCellObjs:获取某工作表中选中的所有单元格坐标对象集合;
107
+ - getCellType:获取单元格类型名称;
108
+ - setSheetZoom:设置工作簿中所有工作表的缩放比例;
109
+ - setActiveSheetBgColor:设置当前激活的工作表中选中的单元格背景颜色;
110
+ - setSheetShowPrintPageLine:设置工作簿中所有工作表是否显示分页线;
111
+ - ignoreSheetShowStrs:忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等;
112
+ - setSheetAuxiliaryLine:设置工作表显示辅助线(底部和右侧的辅助线);
113
+ - ……
114
+
115
+ ## 4.2.3、WorkbookUtils
116
+
117
+ WorkbookUtils 为 SpreadJS 工作簿工具函数属性,该属性下包含以下函数:
118
+
119
+ - print:打印所有工作表;
120
+ - exportToExcel:导出为 Excel 文件;
121
+ - ……
34
122
 
35
123
  ---
package/dist/index.cjs.js CHANGED
@@ -3,7 +3,7 @@
3
3
  var fileSaver = require('file-saver');
4
4
 
5
5
  /**
6
- * 公用工具函数
6
+ * 公用工具函数属性
7
7
  */
8
8
  const CommonUtils = {
9
9
  /**
@@ -24,7 +24,7 @@ const CommonUtils = {
24
24
  };
25
25
 
26
26
  /**
27
- * SpreadJS工作表工具函数
27
+ * SpreadJS工作表工具函数属性
28
28
  */
29
29
  const SheetUtils = {
30
30
  /**
@@ -195,6 +195,7 @@ const SheetUtils = {
195
195
  },
196
196
  /**
197
197
  * 设置工作簿中所有工作表的缩放比例
198
+ * @param spread 工作簿实例
198
199
  * @param scale 缩放比例,默认为:1(100%)
199
200
  */
200
201
  setSheetZoom: (spread, scale) => {
@@ -251,7 +252,8 @@ const SheetUtils = {
251
252
  },
252
253
  /**
253
254
  * 设置工作簿中所有工作表是否显示分页线
254
- * @param scale 缩放比例,默认为:1(100%)
255
+ * @param spread 工作簿实例
256
+ * @param isShow 是否显示分页线(true:显示、false:不显示)
255
257
  */
256
258
  setSheetShowPrintPageLine: (spread, isShow) => {
257
259
  // 暂停绘制
@@ -259,8 +261,9 @@ const SheetUtils = {
259
261
  const sheetCount = spread.getSheetCount();
260
262
  for (let i = 0; i < sheetCount; i++) {
261
263
  const sheet = spread.getSheet(i);
262
- var isVisible = sheet.isPrintLineVisible();
263
- sheet.isPrintLineVisible(!isVisible);
264
+ // 获取当前工作表是否显示分页线
265
+ // var isVisible = sheet.isPrintLineVisible();
266
+ sheet.isPrintLineVisible(isShow);
264
267
  }
265
268
  // 恢复绘制
266
269
  spread.resumePaint();
@@ -345,7 +348,7 @@ const TestFunc = (num) => {
345
348
 
346
349
  // 导出Excel文件所需的第三方包
347
350
  /**
348
- * SpreadJS工作簿工具函数
351
+ * SpreadJS工作簿工具函数属性
349
352
  */
350
353
  const WorkbookUtils = {
351
354
  /**
@@ -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 } 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 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 scale 缩放比例,默认为:1(100%)\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 var isVisible = sheet.isPrintLineVisible();\r\n sheet.isPrintLineVisible(!isVisible);\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 * 测试的函数\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","// 导入单元格实体\r\nimport { CellModel } 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 * 测试的函数\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,2 +1,2 @@
1
- "use strict";var e=require("file-saver");const t={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()}},o={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(e,t,o=!1)=>{let n=[];return t.forEach(((t,o)=>{if(e.getSpans(t).forEach((e=>{n.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})})),void 0===t.row||void 0===t.col||void 0===t.rowCount||void 0===t.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=t.row;o<+t.row+t.rowCount;o++)for(let l=t.col;l<t.col+t.colCount;l++){null==e.getSpan(o,l)&&n.push({row:o,col:l,rowCount:1,colCount:1})}})),o||n.sort(((e,t)=>{if(void 0===e.row||void 0===t.row||void 0===e.col||void 0===t.col)throw new Error("row、col is required.");return e.row==t.row?e.col-t.col:e.row-t.row})),n},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return o.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:e=>{const t=e.getActiveSheet(),n=t.getSelections();return o.getAllCellObjsByRanges(t,n)},getCellType:(e,t,o,n)=>{let l;const r=t.getCellType(o,n);if(r instanceof e.Spread.Sheets.CellTypes.Button?l="button":r instanceof e.Spread.Sheets.CellTypes.RadioButtonList?l="radio":r instanceof e.Spread.Sheets.CellTypes.CheckBox?l="checkbox":r instanceof e.Spread.Sheets.CellTypes.CheckBoxList?l="checkboxList":r instanceof e.Spread.Sheets.CellTypes.HyperLink?l="hyperLink":r instanceof e.Spread.Sheets.CellTypes.ComboBox&&(l="comboBox"),null==l||null==l){const e=t.getStyle(o,n);e&&e.cellButtons&&e.cellButtons.length>0&&("openDateTimePicker"==e.cellButtons[0].command?e.dropDowns&&e.dropDowns.length>0&&(l=e.dropDowns[0].option.showDateRange?"dateRange":"date"):"openCalculator"==e.cellButtons[0].command&&(l="calc"))}return l},setSheetZoom:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let n=0;n<o;n++){e.getSheet(n).zoom(t)}e.resumePaint()},setActiveSheetBgColor:(e,t)=>{const n=e.getActiveSheet();n.suspendPaint();o.getActiveSheetSelectCells(e).forEach((e=>{n.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)})),n.resumePaint()},setSheetShowPrintPageLine:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let t=0;t<o;t++){const o=e.getSheet(t);var n=o.isPrintLineVisible();o.isPrintLineVisible(!n)}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,n,l,r,s,i,c,a){t.some((e=>e==n))?o.call(this,e,"/",l,r,s,i,c,a):o.apply(this,arguments)}},setSheetAuxiliaryLine:(e,t,o,n,l=1,r="#409eff",s=!1)=>{let i=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineBottom"+(s?"Hb":""),0,n,o,l),c=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,l,n),a=document.createElement("div"),u=document.createElement("div");a.style.width=`${o}px`,a.style.height="1px",a.style.borderBottom=`${l}px dashed ${r}`,u.style.width="1px",u.style.height=`${n}px`,u.style.borderLeft=`${l}px dashed ${r}`,i.allowResize(!1),i.allowMove(!1),i.content(a),c.allowResize(!1),c.allowMove(!1),c.content(u),t.floatingObjects.add(i),t.floatingObjects.add(c)}},n={print:(e,t)=>{const o=t.getSheetCount();for(let n=0;n<o;n++){const o=t.getSheet(n);let l=o.printInfo();l.showRowHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),l.showColumnHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),l.rowStart(0),l.rowEnd(o.getRowCount()),l.columnStart(0),l.columnEnd(76),l.margin({top:59.055119999999995,bottom:59.055119999999995,left:98.42520000000002,right:59.055119999999995,header:0,footer:0}),l.paperSize(new e.Spread.Sheets.Print.PaperSize(e.Spread.Sheets.Print.PaperKind.a4)),o.printInfo(l)}t.print()},exportToExcel:(t,o,n="")=>{const l=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new t.Spread.Sheets.Workbook;s.fromJSON(l),s.suspendPaint();const i=s.getSheetCount();for(let e=0;e<i;e++){const t=s.getSheet(e);t.suspendCalcService();for(var c=0;c<t.getRowCount();c++)for(var a=0;a<t.getColumnCount();a++){const e=t.getFormula(c,a);if(null!=e&&null!=e&&r.some((t=>e.indexOf(t)>-1))){const e=t.getValue(c,a);t.getCell(c,a).formula(void 0),t.setValue(c,a,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==n&&(n=s.getSheet(0).name());let u={fileType:t.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((t=>{e.saveAs(t,`${n}.xlsx`)}),(()=>{}),u),s.destroy()}};exports.CommonUtils=t,exports.SheetUtils=o,exports.TestFunc=e=>e+1,exports.WorkbookUtils=n;
1
+ "use strict";var e=require("file-saver");const t={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()}},o={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(e,t,o=!1)=>{let l=[];return t.forEach(((t,o)=>{if(e.getSpans(t).forEach((e=>{l.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})})),void 0===t.row||void 0===t.col||void 0===t.rowCount||void 0===t.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=t.row;o<+t.row+t.rowCount;o++)for(let n=t.col;n<t.col+t.colCount;n++){null==e.getSpan(o,n)&&l.push({row:o,col:n,rowCount:1,colCount:1})}})),o||l.sort(((e,t)=>{if(void 0===e.row||void 0===t.row||void 0===e.col||void 0===t.col)throw new Error("row、col is required.");return e.row==t.row?e.col-t.col:e.row-t.row})),l},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return o.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:e=>{const t=e.getActiveSheet(),l=t.getSelections();return o.getAllCellObjsByRanges(t,l)},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 l=e.getActiveSheet();l.suspendPaint();o.getActiveSheetSelectCells(e).forEach((e=>{l.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)})),l.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,c,a){t.some((e=>e==l))?o.call(this,e,"/",n,r,s,i,c,a):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),c=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,n,l),a=document.createElement("div"),u=document.createElement("div");a.style.width=`${o}px`,a.style.height="1px",a.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(a),c.allowResize(!1),c.allowMove(!1),c.content(u),t.floatingObjects.add(i),t.floatingObjects.add(c)}},l={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:(t,o,l="")=>{const n=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new t.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 c=0;c<t.getRowCount();c++)for(var a=0;a<t.getColumnCount();a++){const e=t.getFormula(c,a);if(null!=e&&null!=e&&r.some((t=>e.indexOf(t)>-1))){const e=t.getValue(c,a);t.getCell(c,a).formula(void 0),t.setValue(c,a,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==l&&(l=s.getSheet(0).name());let u={fileType:t.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((t=>{e.saveAs(t,`${l}.xlsx`)}),(()=>{}),u),s.destroy()}};exports.CommonUtils=t,exports.SheetUtils=o,exports.TestFunc=e=>e+1,exports.WorkbookUtils=l;
2
2
  //# sourceMappingURL=index.cjs.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.min.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 } 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 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 scale 缩放比例,默认为:1(100%)\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 var isVisible = sheet.isPrintLineVisible();\r\n sheet.isPrintLineVisible(!isVisible);\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 * 测试的函数\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":["CommonUtils","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRanges","sheet","selectRanges","isMulColOrder","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","sort","a","b","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getActiveSheetSelectCellObjs","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","suspendPaint","sheetCount","getSheetCount","getSheet","zoom","resumePaint","setActiveSheetBgColor","color","sel","getRange","backColor","setSheetShowPrintPageLine","isShow","isVisible","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","value","x","y","w","h","style","options","some","call","this","apply","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","WorkbookUtils","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","top","bottom","left","right","header","footer","paperSize","PaperSize","PaperKind","a4","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","indexOf","cellVal","getValue","getCell","formula","setValue","resumeCalcService","name","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","blob","saveAs","destroy","num"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.min.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 } 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 * 测试的函数\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":["CommonUtils","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRanges","sheet","selectRanges","isMulColOrder","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","sort","a","b","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getActiveSheetSelectCellObjs","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","suspendPaint","sheetCount","getSheetCount","getSheet","zoom","resumePaint","setActiveSheetBgColor","color","sel","getRange","backColor","setSheetShowPrintPageLine","isShow","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","value","x","y","w","h","style","options","some","call","this","apply","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","WorkbookUtils","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","top","bottom","left","right","header","footer","paperSize","PaperSize","PaperKind","a4","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","indexOf","cellVal","getValue","getCell","formula","setValue","resumeCalcService","name","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","blob","saveAs","destroy","num"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { saveAs } from 'file-saver';
2
2
 
3
3
  /**
4
- * 公用工具函数
4
+ * 公用工具函数属性
5
5
  */
6
6
  const CommonUtils = {
7
7
  /**
@@ -22,7 +22,7 @@ const CommonUtils = {
22
22
  };
23
23
 
24
24
  /**
25
- * SpreadJS工作表工具函数
25
+ * SpreadJS工作表工具函数属性
26
26
  */
27
27
  const SheetUtils = {
28
28
  /**
@@ -193,6 +193,7 @@ const SheetUtils = {
193
193
  },
194
194
  /**
195
195
  * 设置工作簿中所有工作表的缩放比例
196
+ * @param spread 工作簿实例
196
197
  * @param scale 缩放比例,默认为:1(100%)
197
198
  */
198
199
  setSheetZoom: (spread, scale) => {
@@ -249,7 +250,8 @@ const SheetUtils = {
249
250
  },
250
251
  /**
251
252
  * 设置工作簿中所有工作表是否显示分页线
252
- * @param scale 缩放比例,默认为:1(100%)
253
+ * @param spread 工作簿实例
254
+ * @param isShow 是否显示分页线(true:显示、false:不显示)
253
255
  */
254
256
  setSheetShowPrintPageLine: (spread, isShow) => {
255
257
  // 暂停绘制
@@ -257,8 +259,9 @@ const SheetUtils = {
257
259
  const sheetCount = spread.getSheetCount();
258
260
  for (let i = 0; i < sheetCount; i++) {
259
261
  const sheet = spread.getSheet(i);
260
- var isVisible = sheet.isPrintLineVisible();
261
- sheet.isPrintLineVisible(!isVisible);
262
+ // 获取当前工作表是否显示分页线
263
+ // var isVisible = sheet.isPrintLineVisible();
264
+ sheet.isPrintLineVisible(isShow);
262
265
  }
263
266
  // 恢复绘制
264
267
  spread.resumePaint();
@@ -343,7 +346,7 @@ const TestFunc = (num) => {
343
346
 
344
347
  // 导出Excel文件所需的第三方包
345
348
  /**
346
- * SpreadJS工作簿工具函数
349
+ * SpreadJS工作簿工具函数属性
347
350
  */
348
351
  const WorkbookUtils = {
349
352
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.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 } 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 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 scale 缩放比例,默认为:1(100%)\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 var isVisible = sheet.isPrintLineVisible();\r\n sheet.isPrintLineVisible(!isVisible);\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 * 测试的函数\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":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.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 } 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 * 测试的函数\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":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{saveAs as e}from"file-saver";const t={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()}},o={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(e,t,o=!1)=>{let n=[];return t.forEach(((t,o)=>{if(e.getSpans(t).forEach((e=>{n.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})})),void 0===t.row||void 0===t.col||void 0===t.rowCount||void 0===t.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=t.row;o<+t.row+t.rowCount;o++)for(let l=t.col;l<t.col+t.colCount;l++){null==e.getSpan(o,l)&&n.push({row:o,col:l,rowCount:1,colCount:1})}})),o||n.sort(((e,t)=>{if(void 0===e.row||void 0===t.row||void 0===e.col||void 0===t.col)throw new Error("row、col is required.");return e.row==t.row?e.col-t.col:e.row-t.row})),n},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return o.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:e=>{const t=e.getActiveSheet(),n=t.getSelections();return o.getAllCellObjsByRanges(t,n)},getCellType:(e,t,o,n)=>{let l;const r=t.getCellType(o,n);if(r instanceof e.Spread.Sheets.CellTypes.Button?l="button":r instanceof e.Spread.Sheets.CellTypes.RadioButtonList?l="radio":r instanceof e.Spread.Sheets.CellTypes.CheckBox?l="checkbox":r instanceof e.Spread.Sheets.CellTypes.CheckBoxList?l="checkboxList":r instanceof e.Spread.Sheets.CellTypes.HyperLink?l="hyperLink":r instanceof e.Spread.Sheets.CellTypes.ComboBox&&(l="comboBox"),null==l||null==l){const e=t.getStyle(o,n);e&&e.cellButtons&&e.cellButtons.length>0&&("openDateTimePicker"==e.cellButtons[0].command?e.dropDowns&&e.dropDowns.length>0&&(l=e.dropDowns[0].option.showDateRange?"dateRange":"date"):"openCalculator"==e.cellButtons[0].command&&(l="calc"))}return l},setSheetZoom:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let n=0;n<o;n++){e.getSheet(n).zoom(t)}e.resumePaint()},setActiveSheetBgColor:(e,t)=>{const n=e.getActiveSheet();n.suspendPaint();o.getActiveSheetSelectCells(e).forEach((e=>{n.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)})),n.resumePaint()},setSheetShowPrintPageLine:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let t=0;t<o;t++){const o=e.getSheet(t);var n=o.isPrintLineVisible();o.isPrintLineVisible(!n)}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,n,l,r,s,i,c,a){t.some((e=>e==n))?o.call(this,e,"/",l,r,s,i,c,a):o.apply(this,arguments)}},setSheetAuxiliaryLine:(e,t,o,n,l=1,r="#409eff",s=!1)=>{let i=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineBottom"+(s?"Hb":""),0,n,o,l),c=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,l,n),a=document.createElement("div"),u=document.createElement("div");a.style.width=`${o}px`,a.style.height="1px",a.style.borderBottom=`${l}px dashed ${r}`,u.style.width="1px",u.style.height=`${n}px`,u.style.borderLeft=`${l}px dashed ${r}`,i.allowResize(!1),i.allowMove(!1),i.content(a),c.allowResize(!1),c.allowMove(!1),c.content(u),t.floatingObjects.add(i),t.floatingObjects.add(c)}},n=e=>e+1,l={print:(e,t)=>{const o=t.getSheetCount();for(let n=0;n<o;n++){const o=t.getSheet(n);let l=o.printInfo();l.showRowHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),l.showColumnHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),l.rowStart(0),l.rowEnd(o.getRowCount()),l.columnStart(0),l.columnEnd(76),l.margin({top:59.055119999999995,bottom:59.055119999999995,left:98.42520000000002,right:59.055119999999995,header:0,footer:0}),l.paperSize(new e.Spread.Sheets.Print.PaperSize(e.Spread.Sheets.Print.PaperKind.a4)),o.printInfo(l)}t.print()},exportToExcel:(t,o,n="")=>{const l=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new t.Spread.Sheets.Workbook;s.fromJSON(l),s.suspendPaint();const i=s.getSheetCount();for(let e=0;e<i;e++){const t=s.getSheet(e);t.suspendCalcService();for(var c=0;c<t.getRowCount();c++)for(var a=0;a<t.getColumnCount();a++){const e=t.getFormula(c,a);if(null!=e&&null!=e&&r.some((t=>e.indexOf(t)>-1))){const e=t.getValue(c,a);t.getCell(c,a).formula(void 0),t.setValue(c,a,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==n&&(n=s.getSheet(0).name());let u={fileType:t.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((t=>{e(t,`${n}.xlsx`)}),(()=>{}),u),s.destroy()}};export{t as CommonUtils,o as SheetUtils,n as TestFunc,l as WorkbookUtils};
1
+ import{saveAs as e}from"file-saver";const t={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()}},o={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(e,t,o=!1)=>{let l=[];return t.forEach(((t,o)=>{if(e.getSpans(t).forEach((e=>{l.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})})),void 0===t.row||void 0===t.col||void 0===t.rowCount||void 0===t.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=t.row;o<+t.row+t.rowCount;o++)for(let n=t.col;n<t.col+t.colCount;n++){null==e.getSpan(o,n)&&l.push({row:o,col:n,rowCount:1,colCount:1})}})),o||l.sort(((e,t)=>{if(void 0===e.row||void 0===t.row||void 0===e.col||void 0===t.col)throw new Error("row、col is required.");return e.row==t.row?e.col-t.col:e.row-t.row})),l},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return o.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:e=>{const t=e.getActiveSheet(),l=t.getSelections();return o.getAllCellObjsByRanges(t,l)},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 l=e.getActiveSheet();l.suspendPaint();o.getActiveSheetSelectCells(e).forEach((e=>{l.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)})),l.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,c,a){t.some((e=>e==l))?o.call(this,e,"/",n,r,s,i,c,a):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),c=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,n,l),a=document.createElement("div"),u=document.createElement("div");a.style.width=`${o}px`,a.style.height="1px",a.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(a),c.allowResize(!1),c.allowMove(!1),c.content(u),t.floatingObjects.add(i),t.floatingObjects.add(c)}},l=e=>e+1,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:(t,o,l="")=>{const n=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new t.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 c=0;c<t.getRowCount();c++)for(var a=0;a<t.getColumnCount();a++){const e=t.getFormula(c,a);if(null!=e&&null!=e&&r.some((t=>e.indexOf(t)>-1))){const e=t.getValue(c,a);t.getCell(c,a).formula(void 0),t.setValue(c,a,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==l&&(l=s.getSheet(0).name());let u={fileType:t.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((t=>{e(t,`${l}.xlsx`)}),(()=>{}),u),s.destroy()}};export{t as CommonUtils,o as SheetUtils,l as TestFunc,n as WorkbookUtils};
2
2
  //# sourceMappingURL=index.esm.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.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 } 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 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 scale 缩放比例,默认为:1(100%)\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 var isVisible = sheet.isPrintLineVisible();\r\n sheet.isPrintLineVisible(!isVisible);\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 * 测试的函数\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":["CommonUtils","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRanges","sheet","selectRanges","isMulColOrder","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","sort","a","b","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getActiveSheetSelectCellObjs","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","suspendPaint","sheetCount","getSheetCount","getSheet","zoom","resumePaint","setActiveSheetBgColor","color","sel","getRange","backColor","setSheetShowPrintPageLine","isShow","isVisible","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","value","x","y","w","h","style","options","some","call","this","apply","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","TestFunc","num","WorkbookUtils","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","top","bottom","left","right","header","footer","paperSize","PaperSize","PaperKind","a4","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","indexOf","cellVal","getValue","getCell","formula","setValue","resumeCalcService","name","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","blob","saveAs","destroy"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.min.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 } 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 * 测试的函数\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":["CommonUtils","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRanges","sheet","selectRanges","isMulColOrder","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","sort","a","b","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getActiveSheetSelectCellObjs","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","suspendPaint","sheetCount","getSheetCount","getSheet","zoom","resumePaint","setActiveSheetBgColor","color","sel","getRange","backColor","setSheetShowPrintPageLine","isShow","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","value","x","y","w","h","style","options","some","call","this","apply","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","TestFunc","num","WorkbookUtils","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","top","bottom","left","right","header","footer","paperSize","PaperSize","PaperKind","a4","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","indexOf","cellVal","getValue","getCell","formula","setValue","resumeCalcService","name","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","blob","saveAs","destroy"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 公用工具函数
2
+ * 公用工具函数属性
3
3
  */
4
4
  export declare const CommonUtils: {
5
5
  /**
@@ -1,6 +1,6 @@
1
1
  import { CellModel } from "../types/sheet";
2
2
  /**
3
- * SpreadJS工作表工具函数
3
+ * SpreadJS工作表工具函数属性
4
4
  */
5
5
  export declare const SheetUtils: {
6
6
  /**
@@ -47,6 +47,7 @@ export declare const SheetUtils: {
47
47
  getCellType: (GC: any, sheet: any, row: number, col: number) => string | undefined;
48
48
  /**
49
49
  * 设置工作簿中所有工作表的缩放比例
50
+ * @param spread 工作簿实例
50
51
  * @param scale 缩放比例,默认为:1(100%)
51
52
  */
52
53
  setSheetZoom: (spread: any, scale: number) => void;
@@ -58,7 +59,8 @@ export declare const SheetUtils: {
58
59
  setActiveSheetBgColor: (spread: any, color: string) => void;
59
60
  /**
60
61
  * 设置工作簿中所有工作表是否显示分页线
61
- * @param scale 缩放比例,默认为:1(100%)
62
+ * @param spread 工作簿实例
63
+ * @param isShow 是否显示分页线(true:显示、false:不显示)
62
64
  */
63
65
  setSheetShowPrintPageLine: (spread: any, isShow: boolean) => void;
64
66
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * SpreadJS工作簿工具函数
2
+ * SpreadJS工作簿工具函数属性
3
3
  */
4
4
  export declare const WorkbookUtils: {
5
5
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapid-spreadjs",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "SpreadJS常用公用处理函数,包括设计器、工作簿和工作表的相关处理函数。",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 公用工具函数
2
+ * 公用工具函数属性
3
3
  */
4
4
  export const CommonUtils = {
5
5
  /**
@@ -2,7 +2,7 @@
2
2
  import { CellModel } from "../types/sheet";
3
3
 
4
4
  /**
5
- * SpreadJS工作表工具函数
5
+ * SpreadJS工作表工具函数属性
6
6
  */
7
7
  export const SheetUtils = {
8
8
  /**
@@ -224,6 +224,7 @@ export const SheetUtils = {
224
224
 
225
225
  /**
226
226
  * 设置工作簿中所有工作表的缩放比例
227
+ * @param spread 工作簿实例
227
228
  * @param scale 缩放比例,默认为:1(100%)
228
229
  */
229
230
  setSheetZoom: (spread: any, scale: number) => {
@@ -298,7 +299,8 @@ export const SheetUtils = {
298
299
 
299
300
  /**
300
301
  * 设置工作簿中所有工作表是否显示分页线
301
- * @param scale 缩放比例,默认为:1(100%)
302
+ * @param spread 工作簿实例
303
+ * @param isShow 是否显示分页线(true:显示、false:不显示)
302
304
  */
303
305
  setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {
304
306
  // 暂停绘制
@@ -308,8 +310,10 @@ export const SheetUtils = {
308
310
  for (let i = 0; i < sheetCount; i++) {
309
311
  const sheet = spread.getSheet(i);
310
312
 
311
- var isVisible = sheet.isPrintLineVisible();
312
- sheet.isPrintLineVisible(!isVisible);
313
+ // 获取当前工作表是否显示分页线
314
+ // var isVisible = sheet.isPrintLineVisible();
315
+
316
+ sheet.isPrintLineVisible(isShow);
313
317
  }
314
318
 
315
319
  // 恢复绘制
@@ -2,7 +2,7 @@
2
2
  import { saveAs } from "file-saver";
3
3
 
4
4
  /**
5
- * SpreadJS工作簿工具函数
5
+ * SpreadJS工作簿工具函数属性
6
6
  */
7
7
  export const WorkbookUtils = {
8
8
  /**