rapid-spreadjs 1.0.11 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +4 -13
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +4 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/package.json +39 -38
package/dist/index.cjs.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var rapidUtils = require('rapid-utils');
|
|
3
4
|
var fileSaver = require('file-saver');
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -23,6 +24,7 @@ const CommonUtils = {
|
|
|
23
24
|
},
|
|
24
25
|
};
|
|
25
26
|
|
|
27
|
+
// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 "moduleResolution" 选项设置为 "nodenext",还是要将别名添加到 "paths" 选项中?ts(2792))
|
|
26
28
|
/**
|
|
27
29
|
* SpreadJS工作表工具函数属性
|
|
28
30
|
*/
|
|
@@ -87,19 +89,8 @@ const SheetUtils = {
|
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
});
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
// 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)
|
|
93
|
-
allCellObjs.sort((a, b) => {
|
|
94
|
-
if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {
|
|
95
|
-
throw new Error('row、col is required.');
|
|
96
|
-
}
|
|
97
|
-
if (a.row == b.row) {
|
|
98
|
-
return a.col - b.col;
|
|
99
|
-
}
|
|
100
|
-
return a.row - b.row;
|
|
101
|
-
});
|
|
102
|
-
}
|
|
92
|
+
// 对所有单元格坐标对象集合进行排序
|
|
93
|
+
allCellObjs = rapidUtils.orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);
|
|
103
94
|
return allCellObjs;
|
|
104
95
|
},
|
|
105
96
|
/**
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/wookbook.ts"],"sourcesContent":["/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = \"\";\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: 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 (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 常规顺序\r\n if (!isMulColOrder) {\r\n // 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)\r\n allCellObjs.sort((a: CellModel, b: CellModel) => {\r\n if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {\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 * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: Array<string> = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["saveAs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/wookbook.ts"],"sourcesContent":["/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = \"\";\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { orderByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["orderByJson","saveAs"],"mappings":"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"}
|
package/dist/index.cjs.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("file-saver");const
|
|
1
|
+
"use strict";var e=require("rapid-utils"),t=require("file-saver");const o={getColLetterName:e=>{e+=1;let t="";for(;e>0;){const o=(e-1)%26;t=String.fromCharCode(o+65)+t,e=Math.floor((e-1)/26)}return t.toUpperCase()}},l={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(t,o,l=!1)=>{let n=[];return o.forEach((e,o)=>{if(t.getSpans(e).forEach(e=>{n.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})}),void 0===e.row||void 0===e.col||void 0===e.rowCount||void 0===e.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=e.row;o<+e.row+e.rowCount;o++)for(let l=e.col;l<e.col+e.colCount;l++){null==t.getSpan(o,l)&&n.push({row:o,col:l,rowCount:1,colCount:1})}}),n=e.orderByJson(n,l?["col","row"]:["row","col"],["asc","asc"]),n},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return l.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:(e,t=!1)=>{const o=e.getActiveSheet(),n=o.getSelections();return l.getAllCellObjsByRanges(o,n,t)},getCellType:(e,t,o,l)=>{let n;const r=t.getCellType(o,l);if(r instanceof e.Spread.Sheets.CellTypes.Button?n="button":r instanceof e.Spread.Sheets.CellTypes.RadioButtonList?n="radio":r instanceof e.Spread.Sheets.CellTypes.CheckBox?n="checkbox":r instanceof e.Spread.Sheets.CellTypes.CheckBoxList?n="checkboxList":r instanceof e.Spread.Sheets.CellTypes.HyperLink?n="hyperLink":r instanceof e.Spread.Sheets.CellTypes.ComboBox&&(n="comboBox"),null==n||null==n){const e=t.getStyle(o,l);e&&e.cellButtons&&e.cellButtons.length>0&&("openDateTimePicker"==e.cellButtons[0].command?e.dropDowns&&e.dropDowns.length>0&&(n=e.dropDowns[0].option.showDateRange?"dateRange":"date"):"openCalculator"==e.cellButtons[0].command&&(n="calc"))}return n},setSheetZoom:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).zoom(t)}e.resumePaint()},setActiveSheetBgColor:(e,t)=>{const o=e.getActiveSheet();o.suspendPaint();l.getActiveSheetSelectCells(e).forEach(e=>{o.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)}),o.resumePaint()},setSheetShowPrintPageLine:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).isPrintLineVisible(t)}e.resumePaint()},ignoreSheetShowStrs:e=>{const t=["#DIV/0!","#VALUE!","#NAME?","#N/A","#NULL!","#NUM!","#REF!"],o=e.Spread.Sheets.CellTypes.Text.prototype.paint;e.Spread.Sheets.CellTypes.Text.prototype.paint=function(e,l,n,r,s,i,a,c){t.some(e=>e==l)?o.call(this,e,"/",n,r,s,i,a,c):o.apply(this,arguments)}},setSheetAuxiliaryLine:(e,t,o,l,n=1,r="#409eff",s=!1)=>{let i=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineBottom"+(s?"Hb":""),0,l,o,n),a=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,n,l),c=document.createElement("div"),u=document.createElement("div");c.style.width=`${o}px`,c.style.height="1px",c.style.borderBottom=`${n}px dashed ${r}`,u.style.width="1px",u.style.height=`${l}px`,u.style.borderLeft=`${n}px dashed ${r}`,i.allowResize(!1),i.allowMove(!1),i.content(c),a.allowResize(!1),a.allowMove(!1),a.content(u),t.floatingObjects.add(i),t.floatingObjects.add(a)},setActiveSheetWatermark:(e,t,o)=>{if(null==t||null==t)return;const l=e.getActiveSheet();l.suspendPaint(),t.forEach(e=>{l.getCell(e.row,e.col).watermark(o?`{${e.title}}`:void 0),l.setBindingPath(e.row,e.col,o?`${e.pathPrev}.${e.pathField}`:void 0)}),l.resumePaint()},setSheetCellDate:(e,t,o,l=!0)=>{o.forEach((o,n)=>{let r=t.getStyle(o.row,o.col);r||(r=new e.Spread.Sheets.Style),r.cellButtons=[{imageType:e.Spread.Sheets.ButtonImageType.dropdown,command:"openDateTimePicker"}],r.dropDowns=[{type:e.Spread.Sheets.DropDownType.dateTimePicker,option:{showTime:!1,showDateRange:!1}}],r.formatter=o.dateFormat,r.shrinkToFit=l,t.setStyle(o.row,o.col,r)})}},n={print:(e,t)=>{const o=t.getSheetCount();for(let l=0;l<o;l++){const o=t.getSheet(l);let n=o.printInfo();n.showRowHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.showColumnHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.rowStart(0),n.rowEnd(o.getRowCount()),n.columnStart(0),n.columnEnd(76),n.margin({top:59.055119999999995,bottom:59.055119999999995,left:98.42520000000002,right:59.055119999999995,header:0,footer:0}),n.paperSize(new e.Spread.Sheets.Print.PaperSize(e.Spread.Sheets.Print.PaperKind.a4)),o.printInfo(n)}t.print()},exportToExcel:(e,o,l="")=>{const n=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new e.Spread.Sheets.Workbook;s.fromJSON(n),s.suspendPaint();const i=s.getSheetCount();for(let e=0;e<i;e++){const t=s.getSheet(e);t.suspendCalcService();for(var a=0;a<t.getRowCount();a++)for(var c=0;c<t.getColumnCount();c++){const e=t.getFormula(a,c);if(null!=e&&null!=e&&r.some(t=>e.indexOf(t)>-1)){const e=t.getValue(a,c);t.getCell(a,c).formula(void 0),t.setValue(a,c,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==l&&(l=s.getSheet(0).name());let u={fileType:e.Spread.Sheets.FileType.excel,includeBindingSource:!0,includeStyles:!0,includeFormulas:!0,saveAsView:!1,rowHeadersAsFrozenColumns:!1,columnHeadersAsFrozenRows:!1,includeAutoMergedCells:!1,includeCalcModelCache:!1,includeUnusedNames:!0,includeEmptyRegionCells:!0};s.export(e=>{t.saveAs(e,`${l}.xlsx`)},()=>{},u),s.destroy()}};exports.CommonUtils=o,exports.SheetUtils=l,exports.WorkbookUtils=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.min.js.map
|
|
@@ -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, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: 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 (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 常规顺序\r\n if (!isMulColOrder) {\r\n // 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)\r\n allCellObjs.sort((a: CellModel, b: CellModel) => {\r\n if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {\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 * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: Array<string> = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["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","setActiveSheetWatermark","cells","cell","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","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","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.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","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { orderByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["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","orderByJson","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","setActiveSheetWatermark","cells","cell","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","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","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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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { orderByJson } from 'rapid-utils';
|
|
1
2
|
import { saveAs } from 'file-saver';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -21,6 +22,7 @@ const CommonUtils = {
|
|
|
21
22
|
},
|
|
22
23
|
};
|
|
23
24
|
|
|
25
|
+
// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 "moduleResolution" 选项设置为 "nodenext",还是要将别名添加到 "paths" 选项中?ts(2792))
|
|
24
26
|
/**
|
|
25
27
|
* SpreadJS工作表工具函数属性
|
|
26
28
|
*/
|
|
@@ -85,19 +87,8 @@ const SheetUtils = {
|
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
});
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
// 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)
|
|
91
|
-
allCellObjs.sort((a, b) => {
|
|
92
|
-
if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {
|
|
93
|
-
throw new Error('row、col is required.');
|
|
94
|
-
}
|
|
95
|
-
if (a.row == b.row) {
|
|
96
|
-
return a.col - b.col;
|
|
97
|
-
}
|
|
98
|
-
return a.row - b.row;
|
|
99
|
-
});
|
|
100
|
-
}
|
|
90
|
+
// 对所有单元格坐标对象集合进行排序
|
|
91
|
+
allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);
|
|
101
92
|
return allCellObjs;
|
|
102
93
|
},
|
|
103
94
|
/**
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: 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 (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 常规顺序\r\n if (!isMulColOrder) {\r\n // 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)\r\n allCellObjs.sort((a: CellModel, b: CellModel) => {\r\n if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {\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 * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: Array<string> = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":[],"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","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { orderByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":[],"mappings":"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"}
|
package/dist/index.esm.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{orderByJson as e}from"rapid-utils";import{saveAs as t}from"file-saver";const o={getColLetterName:e=>{e+=1;let t="";for(;e>0;){const o=(e-1)%26;t=String.fromCharCode(o+65)+t,e=Math.floor((e-1)/26)}return t.toUpperCase()}},l={getActiveSheetSelectCells:e=>e.getActiveSheet().getSelections(),setActiveSheetSelectCells:(e,t)=>{e.getActiveSheet().setSelection(t.row,t.col,t.rowCount,t.colCount)},getAllCellObjsByRanges:(t,o,l=!1)=>{let n=[];return o.forEach((e,o)=>{if(t.getSpans(e).forEach(e=>{n.push({row:e.row,col:e.col,rowCount:e.rowCount,colCount:e.colCount})}),void 0===e.row||void 0===e.col||void 0===e.rowCount||void 0===e.colCount)throw new Error("row、col、rowCount、colCount is required.");for(let o=e.row;o<+e.row+e.rowCount;o++)for(let l=e.col;l<e.col+e.colCount;l++){null==t.getSpan(o,l)&&n.push({row:o,col:l,rowCount:1,colCount:1})}}),n=e(n,l?["col","row"]:["row","col"],["asc","asc"]),n},getSheetAllCellObjs:e=>{const t=[{row:0,col:0,rowCount:e.getRowCount(),colCount:e.getColumnCount()}];return l.getAllCellObjsByRanges(e,t)},getActiveSheetSelectCellObjs:(e,t=!1)=>{const o=e.getActiveSheet(),n=o.getSelections();return l.getAllCellObjsByRanges(o,n,t)},getCellType:(e,t,o,l)=>{let n;const r=t.getCellType(o,l);if(r instanceof e.Spread.Sheets.CellTypes.Button?n="button":r instanceof e.Spread.Sheets.CellTypes.RadioButtonList?n="radio":r instanceof e.Spread.Sheets.CellTypes.CheckBox?n="checkbox":r instanceof e.Spread.Sheets.CellTypes.CheckBoxList?n="checkboxList":r instanceof e.Spread.Sheets.CellTypes.HyperLink?n="hyperLink":r instanceof e.Spread.Sheets.CellTypes.ComboBox&&(n="comboBox"),null==n||null==n){const e=t.getStyle(o,l);e&&e.cellButtons&&e.cellButtons.length>0&&("openDateTimePicker"==e.cellButtons[0].command?e.dropDowns&&e.dropDowns.length>0&&(n=e.dropDowns[0].option.showDateRange?"dateRange":"date"):"openCalculator"==e.cellButtons[0].command&&(n="calc"))}return n},setSheetZoom:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).zoom(t)}e.resumePaint()},setActiveSheetBgColor:(e,t)=>{const o=e.getActiveSheet();o.suspendPaint();l.getActiveSheetSelectCells(e).forEach(e=>{o.getRange(e.row,e.col,e.rowCount,e.colCount).backColor(t)}),o.resumePaint()},setSheetShowPrintPageLine:(e,t)=>{e.suspendPaint();const o=e.getSheetCount();for(let l=0;l<o;l++){e.getSheet(l).isPrintLineVisible(t)}e.resumePaint()},ignoreSheetShowStrs:e=>{const t=["#DIV/0!","#VALUE!","#NAME?","#N/A","#NULL!","#NUM!","#REF!"],o=e.Spread.Sheets.CellTypes.Text.prototype.paint;e.Spread.Sheets.CellTypes.Text.prototype.paint=function(e,l,n,r,s,i,a,c){t.some(e=>e==l)?o.call(this,e,"/",n,r,s,i,a,c):o.apply(this,arguments)}},setSheetAuxiliaryLine:(e,t,o,l,n=1,r="#409eff",s=!1)=>{let i=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineBottom"+(s?"Hb":""),0,l,o,n),a=new e.Spread.Sheets.FloatingObjects.FloatingObject("floatLineRight"+(s?"Hb":""),o,0,n,l),c=document.createElement("div"),p=document.createElement("div");c.style.width=`${o}px`,c.style.height="1px",c.style.borderBottom=`${n}px dashed ${r}`,p.style.width="1px",p.style.height=`${l}px`,p.style.borderLeft=`${n}px dashed ${r}`,i.allowResize(!1),i.allowMove(!1),i.content(c),a.allowResize(!1),a.allowMove(!1),a.content(p),t.floatingObjects.add(i),t.floatingObjects.add(a)},setActiveSheetWatermark:(e,t,o)=>{if(null==t||null==t)return;const l=e.getActiveSheet();l.suspendPaint(),t.forEach(e=>{l.getCell(e.row,e.col).watermark(o?`{${e.title}}`:void 0),l.setBindingPath(e.row,e.col,o?`${e.pathPrev}.${e.pathField}`:void 0)}),l.resumePaint()},setSheetCellDate:(e,t,o,l=!0)=>{o.forEach((o,n)=>{let r=t.getStyle(o.row,o.col);r||(r=new e.Spread.Sheets.Style),r.cellButtons=[{imageType:e.Spread.Sheets.ButtonImageType.dropdown,command:"openDateTimePicker"}],r.dropDowns=[{type:e.Spread.Sheets.DropDownType.dateTimePicker,option:{showTime:!1,showDateRange:!1}}],r.formatter=o.dateFormat,r.shrinkToFit=l,t.setStyle(o.row,o.col,r)})}},n={print:(e,t)=>{const o=t.getSheetCount();for(let l=0;l<o;l++){const o=t.getSheet(l);let n=o.printInfo();n.showRowHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.showColumnHeader(e.Spread.Sheets.Print.PrintVisibilityType.hide),n.rowStart(0),n.rowEnd(o.getRowCount()),n.columnStart(0),n.columnEnd(76),n.margin({top:59.055119999999995,bottom:59.055119999999995,left:98.42520000000002,right:59.055119999999995,header:0,footer:0}),n.paperSize(new e.Spread.Sheets.Print.PaperSize(e.Spread.Sheets.Print.PaperKind.a4)),o.printInfo(n)}t.print()},exportToExcel:(e,o,l="")=>{const n=o.toJSON({includeBindingSource:!0}),r=["YJMAX","YJMIN","YJMID","YJGETNUM","YJGETS","YJGETCV","YJINTERPOLATIONMETHOD","YJINTERPOLATIONMETHOD_Y"],s=new e.Spread.Sheets.Workbook;s.fromJSON(n),s.suspendPaint();const i=s.getSheetCount();for(let e=0;e<i;e++){const t=s.getSheet(e);t.suspendCalcService();for(var a=0;a<t.getRowCount();a++)for(var c=0;c<t.getColumnCount();c++){const e=t.getFormula(a,c);if(null!=e&&null!=e&&r.some(t=>e.indexOf(t)>-1)){const e=t.getValue(a,c);t.getCell(a,c).formula(void 0),t.setValue(a,c,e)}}t.resumeCalcService(!1)}s.resumePaint(),""==l&&(l=s.getSheet(0).name());let p={fileType:e.Spread.Sheets.FileType.excel,includeBindingSource:!0,includeStyles:!0,includeFormulas:!0,saveAsView:!1,rowHeadersAsFrozenColumns:!1,columnHeadersAsFrozenRows:!1,includeAutoMergedCells:!1,includeCalcModelCache:!1,includeUnusedNames:!0,includeEmptyRegionCells:!0};s.export(e=>{t(e,`${l}.xlsx`)},()=>{},p),s.destroy()}};export{o as CommonUtils,l as SheetUtils,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, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: 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 (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 常规顺序\r\n if (!isMulColOrder) {\r\n // 对单元格集合对象对象进行排序,先按row后按col进行升序排序(注意:此处非常重要,如果不排序,获取到的单元格顺序有可能是乱的【不完全按照模板顺序返回】)\r\n allCellObjs.sort((a: CellModel, b: CellModel) => {\r\n if (a.row === undefined || b.row === undefined || a.col === undefined || b.col === undefined) {\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 * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: Array<string> = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["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","setActiveSheetWatermark","cells","cell","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","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","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","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { orderByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from \"file-saver\";\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(\r\n GC.Spread.Sheets.Print.PrintVisibilityType.hide\r\n );\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(\r\n new GC.Spread.Sheets.Print.PaperSize(\r\n GC.Spread.Sheets.Print.PaperKind.a4\r\n )\r\n );\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = \"\") => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = [\r\n \"YJMAX\",\r\n \"YJMIN\",\r\n \"YJMID\",\r\n \"YJGETNUM\",\r\n \"YJGETS\",\r\n \"YJGETCV\",\r\n \"YJINTERPOLATIONMETHOD\",\r\n \"YJINTERPOLATIONMETHOD_Y\",\r\n ];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (\r\n cellFormula != null &&\r\n cellFormula != undefined &&\r\n removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)\r\n ) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == \"\") {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n};\r\n"],"names":["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","orderByJson","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","setActiveSheetWatermark","cells","cell","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","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","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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"}
|
package/package.json
CHANGED
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "rapid-spreadjs",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "SpreadJS常用公用处理函数,包括设计器、工作簿和工作表的相关处理函数。",
|
|
5
|
-
"main": "dist/index.cjs.js",
|
|
6
|
-
"module": "dist/index.esm.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"test": "echo \"Error: no test specified\" && exit 1",
|
|
10
|
-
"build": "rollup -c rollup.config.mjs"
|
|
11
|
-
},
|
|
12
|
-
"keywords": [
|
|
13
|
-
"utils",
|
|
14
|
-
"helpers",
|
|
15
|
-
"spreadjs",
|
|
16
|
-
"spreadsheet",
|
|
17
|
-
"excel",
|
|
18
|
-
"workbook",
|
|
19
|
-
"worksheet"
|
|
20
|
-
],
|
|
21
|
-
"author": {
|
|
22
|
-
"name": "qubernet",
|
|
23
|
-
"email": "qubernet@163.com",
|
|
24
|
-
"url": "https://www.cnblogs.com/qubernet"
|
|
25
|
-
},
|
|
26
|
-
"license": "MIT",
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
29
|
-
"@rollup/plugin-typescript": "^12.1.2",
|
|
30
|
-
"rollup": "^4.34.9",
|
|
31
|
-
"tslib": "^2.8.1",
|
|
32
|
-
"typescript": "^5.8.2"
|
|
33
|
-
},
|
|
34
|
-
"dependencies": {
|
|
35
|
-
"@types/file-saver": "^2.0.7",
|
|
36
|
-
"file-saver": "^2.0.5"
|
|
37
|
-
|
|
38
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "rapid-spreadjs",
|
|
3
|
+
"version": "1.0.12",
|
|
4
|
+
"description": "SpreadJS常用公用处理函数,包括设计器、工作簿和工作表的相关处理函数。",
|
|
5
|
+
"main": "dist/index.cjs.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
10
|
+
"build": "rollup -c rollup.config.mjs"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"utils",
|
|
14
|
+
"helpers",
|
|
15
|
+
"spreadjs",
|
|
16
|
+
"spreadsheet",
|
|
17
|
+
"excel",
|
|
18
|
+
"workbook",
|
|
19
|
+
"worksheet"
|
|
20
|
+
],
|
|
21
|
+
"author": {
|
|
22
|
+
"name": "qubernet",
|
|
23
|
+
"email": "qubernet@163.com",
|
|
24
|
+
"url": "https://www.cnblogs.com/qubernet"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
29
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
30
|
+
"rollup": "^4.34.9",
|
|
31
|
+
"tslib": "^2.8.1",
|
|
32
|
+
"typescript": "^5.8.2"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@types/file-saver": "^2.0.7",
|
|
36
|
+
"file-saver": "^2.0.5",
|
|
37
|
+
"rapid-utils": "^1.0.19"
|
|
38
|
+
}
|
|
39
|
+
}
|