/** * Created by Tony on 2017/4/28. */ var sheetCommonObj = { // CSL.2017.06.05 // createSpread、initSheet 在一个Spread多个Sheet分别调用时的情况下使用。 createSpread: function(container, SheetCount){ var me = this; var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: SheetCount }); spreadBook.options.tabStripVisible = false; spreadBook.options.showHorizontalScrollbar = true; spreadBook.options.showVerticalScrollbar = true; spreadBook.options.allowCopyPasteExcelStyle = false; spreadBook.options.allowUserDragDrop = true; spreadBook.options.allowContextMenu = false; spreadBook.options.allowUserEditFormula = false; spreadBook.options.showDragFillSmartTag = false; return spreadBook; }, initSheet: function(sheet, setting, rowCount) { var me = this; var spreadNS = GC.Spread.Sheets; sheet.suspendPaint(); sheet.suspendEvent(); if(setting.frozenCols) sheet.frozenColumnCount(setting.frozenCols);//冻结列 sheet.setRowCount(1, spreadNS.SheetArea.colHeader); sheet.setColumnCount(setting.header.length, spreadNS.SheetArea.viewport); if (setting && setting.view && setting.view.colHeaderHeight) { sheet.setRowHeight(0, setting.view.colHeaderHeight, spreadNS.SheetArea.colHeader); }; if (setting && setting.view && setting.view.rowHeaderWidth) { sheet.setColumnWidth(0, setting.view.rowHeaderWidth, spreadNS.SheetArea.rowHeader); }; sheet.options.colHeaderAutoTextIndex = 1; sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers; sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values; sheet.options.protectionOptions = { allowResizeColumns: true }; sheet.showRowOutline(false); sheet.options.allowCellOverflow = false; me.buildHeader(sheet, setting); if (rowCount > 0) sheet.setRowCount(rowCount); else sheet.setRowCount(1); sheet.resumeEvent(); sheet.resumePaint(); }, // buildSheet 在一个Spread、一个Sheet的情况下使用。 buildSheet: function(container, setting, rowCount) { var me = this; var spreadBook = me.createSpread(container, { sheetCount: 1 }); var sheet = spreadBook.getSheet(0); me.initSheet(sheet, setting, rowCount); return spreadBook; }, buildHeader: function(sheet, setting){ var me = this, ch = GC.Spread.Sheets.SheetArea.colHeader; for (var i = 0; i < setting.header.length; i++) { sheet.setValue(0, i, setting.header[i].headerName, ch); sheet.getCell(0, i, ch).wordWrap(true); sheet.setColumnWidth(i, setting.header[i].headerWidth?setting.header[i].headerWidth:100); sheet.setColumnVisible(i,setting.header[i].visible === false ? false:true); } }, cleanSheet: function(sheet, setting, rowCount) { sheet.suspendPaint(); sheet.suspendEvent(); sheet.clear(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data); if (rowCount > 0) sheet.setRowCount(rowCount); sheet.clearSelection(); sheet.resumeEvent(); sheet.resumePaint(); }, cleanData: function (sheet, setting, rowCount) { sheet.suspendPaint(); sheet.suspendEvent(); sheet.clear(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data); if (rowCount > 0) sheet.setRowCount(rowCount); sheet.resumeEvent(); sheet.resumePaint(); }, setAreaAlign: function(area, hAlign, vAlign){ if (!(hAlign) || hAlign === "left") { area.hAlign(GC.Spread.Sheets.HorizontalAlign.left); } else if (hAlign === "right") { area.hAlign(GC.Spread.Sheets.HorizontalAlign.right); } else if (hAlign === "center") { area.hAlign(GC.Spread.Sheets.HorizontalAlign.center); } else { area.hAlign(GC.Spread.Sheets.HorizontalAlign.left); } if (!(vAlign) || vAlign === "center") { area.vAlign(GC.Spread.Sheets.VerticalAlign.center); } else if (vAlign === "top") { area.vAlign(GC.Spread.Sheets.VerticalAlign.top); } else if (vAlign === "bottom") { area.vAlign(GC.Spread.Sheets.VerticalAlign.bottom); } else { area.vAlign(GC.Spread.Sheets.VerticalAlign.center); } }, showData: function(sheet, setting, data,distTypeTree) { var me = this, ch = GC.Spread.Sheets.SheetArea.viewport; sheet.suspendPaint(); sheet.suspendEvent(); //sheet.addRows(row, 1); sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data); if(sheet.getRowCount() 0) { sheet.options.isProtected = true; sheet.getRange(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport).locked(false); for (var i = 0; i < setting.view.lockColumns.length; i++) { sheet.getRange(-1,setting.view.lockColumns[i], -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true); } } }, setCheckBoxCell(row,col,sheet,val){ var c = new GC.Spread.Sheets.CellTypes.CheckBox(); c.isThreeState(false); sheet.setCellType(row, col,c,GC.Spread.Sheets.SheetArea.viewport); sheet.getCell(row, col).value(val); sheet.getCell(row, col).hAlign(GC.Spread.Sheets.HorizontalAlign.center); }, setComboBox(row,col,sheet,options,editorValueType){ //let combo = new GC.Spread.Sheets.CellTypes.ComboBox(); let dynamicCombo = sheetCommonObj.getDynamicCombo(true); if(options){ dynamicCombo.itemHeight(options.length).items(options); if(editorValueType==true){ dynamicCombo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value); } } sheet.setCellType(row, col,dynamicCombo,GC.Spread.Sheets.SheetArea.viewport); }, setRowStyle(row,sheet,bgColour) { if(bgColour){ let style = new GC.Spread.Sheets.Style(); style.backColor = bgColour; style.borderLeft = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin); style.borderTop = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin); style.borderRight = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin); style.borderBottom = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin); sheet.setStyle(row, -1, style); } }, getCustomerCoeCellType: function (htmlGenerator,setEditorValue,updateCallback) { let me = this; function CustomerCoeCellType() { this.isEscKey=false; this.displayText=''; } CustomerCoeCellType.prototype = new GC.Spread.Sheets.CellTypes.Base(); CustomerCoeCellType.prototype.createEditorElement = function (context) { console.log("create editor") let element = document.createElement("div");//这里创建的,会自动销毁 return element }; CustomerCoeCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) { if (editorContext) { $editor = $(editorContext); $editor.css("position", "fixed"); $editor.css("background", "white"); $editor.css("width", cellRect.width); $editor.attr("gcUIElement", "gcEditingInput"); if(htmlGenerator) htmlGenerator(context,cellRect,$editor); } } CustomerCoeCellType.prototype.deactivateEditor = function (editorContext, context) { }; CustomerCoeCellType.prototype.setEditorValue = function (editor, value, context) { console.log("set editor value"); this.displayText = value; }; CustomerCoeCellType.prototype.getEditorValue = function (editor, context) { console.log("get value"); if(this.isEscKey !=true&& updateCallback){ updateCallback(); } this.isEscKey = false; return this.displayText; }; CustomerCoeCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect, context) { console.log(" update editor"); if( setEditorValue){//不是esc时才更新 setEditorValue(context); } }; CustomerCoeCellType.prototype.isReservedKey = function (e, context) { //cell type handle tab key by itself this.isEscKey = e.keyCode === GC.Spread.Commands.Key.esc; return false; }; return new CustomerCoeCellType(); }, scrollSheetForOption:function (sheet,cxt,cellRect,row,options){ let topRow = sheet.getViewportTopRow(1); if(row == topRow) return;//已经是最顶行了 let length = options&&options.length>0?options.length:1; let height = cxt.canvas.height; let startY = cellRect.y+cellRect.height;//下拉框的起始显示位置 let endY = startY + length * cellRect.height;//下拉框的结束显示位置 if(endY <= height) return; //如果没有超出显示位置,直接返回 let overRow = Math.ceil((endY - height)/cellRect.height);//超出的行数 let showRow = topRow + overRow > row?row:topRow + overRow; sheet.showRow(showRow, GC.Spread.Sheets.VerticalPosition.top); }, setSelectButton(row,col,sheet,header){ let getSelectButton = function (cellWidth=100) { function moreButton() { } moreButton.prototype = new GC.Spread.Sheets.CellTypes.Button(); moreButton.prototype.paint = function (ctx, value, x, y, w, h, style, options){ GC.Spread.Sheets.CellTypes.Button.prototype.paint.call(this, ctx, value, x, y, w, h, style, options); let buttonW = cellWidth/5; let endX = x+w-2; if(value){ let textWidth = ctx.measureText(value).width; let spaceWidth = cellWidth - buttonW; let textEndX = x+2+textWidth; if(spaceWidth1;i--){ let newValue = value.substr(0,i); let newTestWidth = ctx.measureText(newValue).width; if(spaceWidth>newTestWidth){ value = newValue; textEndX = x+2+newTestWidth; break; } } } ctx.fillText(value,textEndX,y+h-5); } //画三个点 ctx.save(); ctx.beginPath(); ctx.arc(endX-buttonW/2,y+h/2,1,0,360,false); ctx.arc(endX-buttonW/2-4,y+h/2,1,0,360,false); ctx.arc(endX-buttonW/2+4,y+h/2,1,0,360,false); ctx.fillStyle="black";//填充颜色,默认是黑色 ctx.fill();//画实心圆 ctx.closePath(); ctx.restore(); }; moreButton.prototype.processMouseLeave= function (hitinfo) { let newCell = new selectButton(); hitinfo.sheet.setCellType(hitinfo.row, hitinfo.col, newCell, GC.Spread.Sheets.SheetArea.viewport); hitinfo.sheet.getCell(hitinfo.row, hitinfo.col).locked(false); }; function selectButton() { } selectButton.prototype = new GC.Spread.Sheets.CellTypes.Text(); selectButton.prototype.paint = function (ctx, value, x, y, w, h, style, options){ GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this,arguments); }; selectButton.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) { return { x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: context.sheetArea }; }; selectButton.prototype.processMouseDown = function (hitinfo){ if(hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).locked()!=true){ let b1 = new moreButton(); b1.marginLeft(cellWidth*4/5); hitinfo.sheet.setCellType(hitinfo.row, hitinfo.col, b1, GC.Spread.Sheets.SheetArea.viewport); hitinfo.sheet.getCell(hitinfo.row, hitinfo.col).locked(true); } }; return new selectButton(); }; sheet.setCellType(row, col,getSelectButton(header.headerWidth),GC.Spread.Sheets.SheetArea.viewport); }, setReplaceButton(row,col,sheet){ let replaceButton = function(){ }; replaceButton.prototype = new GC.Spread.Sheets.CellTypes.Button(); replaceButton.prototype.paint = function (ctx, value, x, y, w, h, style, options){ GC.Spread.Sheets.CellTypes.Button.prototype.paint.apply(this,arguments); if(value){ ctx.save(); ctx.fillStyle = "white"; let fh = options.fontInfo&&options.fontInfo.fontSize?options.fontInfo.fontSize:h-6; ctx.fillText(value,x+(w+ctx.measureText(value).width)/2,y+(h+fh)/2-2); ctx.restore(); } }; let cellType = new replaceButton(); cellType.buttonBackColor("#07A0FF"); sheet.setCellType(row, col,cellType,GC.Spread.Sheets.SheetArea.viewport); }, setTipsCell(row,col,sheet,header){ let TipCellType = function () {}; TipCellType.prototype = new GC.Spread.Sheets.CellTypes.Text(); TipCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) { return { x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheet: context.sheet, sheetArea: context.sheetArea }; }; TipCellType.prototype.processMouseEnter = function (hitinfo) { let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col); let value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col); let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col); let acStyle = hitinfo.sheet.getActualStyle(hitinfo.row, hitinfo.col), zoom = hitinfo.sheet.zoom(); let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport}); let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width(); let setting = {}; if(textLength <= cellWidth){ return; } if(sheet && sheet.getParent().qo){ setting.pos = SheetDataHelper.getObjPos(sheet.getParent().qo); } TREE_SHEET_HELPER.showTipsDiv(text,setting,hitinfo); }; TipCellType.prototype.processMouseLeave = function (hitinfo) { TREE_SHEET_HELPER.tipDiv = 'hide'; if (TREE_SHEET_HELPER._toolTipElement) { $(TREE_SHEET_HELPER._toolTipElement).hide(); TREE_SHEET_HELPER._toolTipElement = null; }; TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理 }; sheet.setCellType(row, col,new TipCellType(),GC.Spread.Sheets.SheetArea.viewport); }, chkIfEmpty: function(rObj, setting) { var rst = true; if (rObj) { for (var i = 0; i < setting.header.length; i++) { if (rObj[setting.header[i].dataCode]) { rst = false; break; } } } return rst; }, //add by zhong 2017-10-10 //动态下拉框,配合EnterCell, args.sheet.repaint(); getDynamicCombo: function (forLocked) { let ComboCellForActiveCell = function () { }; ComboCellForActiveCell.prototype = new GC.Spread.Sheets.CellTypes.ComboBox(); ComboCellForActiveCell.prototype.paintValue = function (ctx, value, x, y, w, h, style, options) { let sheet = options.sheet; if (options.row === sheet.getActiveRowIndex() && options.col === sheet.getActiveColumnIndex() && (!forLocked || forLocked && !sheet.getCell(options.row, options.col).locked())) { GC.Spread.Sheets.CellTypes.ComboBox.prototype.paintValue.apply(this, arguments); } else { GC.Spread.Sheets.CellTypes.Base.prototype.paintValue.apply(this, arguments); } }; ComboCellForActiveCell.prototype.getHitInfo = function (x, y, cellStyle, cellRect, options) { let sheet = options.sheet; if (options.row === sheet.getActiveRowIndex() && options.col === sheet.getActiveColumnIndex() && (!forLocked || forLocked && !sheet.getCell(options.row, options.col).locked())) { return GC.Spread.Sheets.CellTypes.ComboBox.prototype.getHitInfo.apply(this, arguments); } else { return { x: x, y: y, row: options.row, col: options.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: options.sheetArea };//GC.Spread.Sheets.CellTypes.Text.prototype.getHitInfo.apply(this, arguments); } }; return new ComboCellForActiveCell(); }, getTipsCombo:function (forLocked,tips,setting,node) { let getTipsCombo = function () { this.clickCom=false; }; getTipsCombo.prototype = sheetCommonObj.getDynamicCombo(forLocked); if(tips && tips !=""){ getTipsCombo.prototype.processMouseEnter = function(hitinfo){ if(this.clickCom == true){ //点击了下拉框的三角形,则不用再显示悬浮框了 this.clickCom = false; return; } let text = typeof tips == 'function'?tips(node):tips; TREE_SHEET_HELPER.delayShowTips(hitinfo,setting,text); }; getTipsCombo.prototype.processMouseLeave = function (hitinfo) { TREE_SHEET_HELPER.hideTipsDiv(); }; getTipsCombo.prototype.processMouseDown = function (hitinfo){ if(hitinfo.isReservedLocation == true){//这里是点击了下拉框的三角形才会有这个属性 TREE_SHEET_HELPER.hideTipsDiv(); this.clickCom = true; } GC.Spread.Sheets.CellTypes.ComboBox.prototype.processMouseDown.apply(this, arguments); }; getTipsCombo.prototype.updateEditor = function (editorContext, cellStyle, cellRect, context){ TREE_SHEET_HELPER.hideTipsDiv(); GC.Spread.Sheets.CellTypes.ComboBox.prototype.updateEditor.apply(this, arguments); }; } return new getTipsCombo(); }, setDynamicCombo: function (sheet, beginRow, col, rowCount, items, itemsHeight, itemsType) { let me = this; sheet.suspendPaint(); let combo = me.getDynamicCombo(); for(let i = 0, len = rowCount; i < len; i++){ if(itemsHeight) { combo.itemHeight(itemsHeight); combo._maxDropDownItems = itemsHeight + 5; } if(itemsType === 'value') combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value); else if(itemsType === 'text') combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text); else combo.items(items); sheet.getCell(beginRow + i, col).cellType(combo); } sheet.resumePaint(); }, setStaticCombo: function (sheet, beginRow, col, rowCount, items, itemsHeight, itemsType) { sheet.suspendPaint(); let combo = new GC.Spread.Sheets.CellTypes.ComboBox(); for(let i = 0, len = rowCount; i < len; i++){ if(itemsHeight) combo.itemHeight(itemsHeight); if(itemsType === 'value') combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value); else if(itemsType === 'text') combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text); else combo.items(items); sheet.getCell(beginRow + i, col).cellType(combo); } sheet.resumePaint(); }, //设置系统粘贴板数据,需要用户触发事件,直接调用会失败 copyTextToClipboard: function(text) { let textArea = document.createElement("textarea"); textArea.style.position = 'fixed'; textArea.style.top = 0; textArea.style.left = 0; textArea.style.width = '2em'; textArea.style.height = '2em'; textArea.style.padding = 0; textArea.style.border = 'none'; textArea.style.outline = 'none'; textArea.style.boxShadow = 'none'; textArea.style.background = 'transparent'; textArea.value = text; document.body.appendChild(textArea); textArea.select(); try { let successful = document.execCommand('copy'); let msg = successful ? 'successful' : 'unsuccessful'; console.log('Copying text command was ' + msg); } catch (err) { console.log('Oops, unable to copy'); } document.body.removeChild(textArea); }, //获取选中区域的表格类型数据(可粘贴到excel) getTableData: function (sheet, colSettings = null) { let rst = ''; let sel = sheet.getSelections()[0]; let pasteText = []; for(let row = sel.row; row < sel.row + sel.rowCount; row++){ if(!sheet.getCell(row, -1).visible()) continue; let rowText = []; for(let j = 0; j < sel.colCount; j++){ let col = sel.col + j; if(!sheet.getCell(-1, col).visible()) continue; if(colSettings && (colSettings[col]['data']['field'] === 'itemCharacterText' || colSettings[col]['data']['field'] === 'jobContentText')) rowText.push(sheet.getText(row, col) ? `"${sheet.getText(row, col)}"` : ''); else rowText.push(sheet.getText(row, col) ? sheet.getText(row, col): ''); } pasteText.push(rowText.join('\t')); } return pasteText.join('\n'); }, transferToTreeSetting:function(setting,treeSetting,treeCol){ for(let h of setting.header){ treeSetting.cols.push(getSettingCol(h)) } for(let l of setting.view.lockColumns){ treeSetting.cols[l].readOnly = true; } return treeSetting; function getSettingCol(header) { let aMap ={left:0,center:1,right:2}; let hAlign = header.hAlign?aMap[header.hAlign]:0; let col = { "width":header.headerWidth?header.headerWidth:100, "head":{ "titleNames":Array.isArray(header.headerName)?header.headerName:[header.headerName], "spanCols":header.spanCols?header.spanCols:[1], "spanRows":header.spanRows?header.spanRows:[1], "vAlign":[1], "hAlign":[1], "font":["Arial"] }, "data": { "field": header.dataCode, "vAlign": 1, "hAlign": hAlign, "font": "Arial" } }; if(header.showHint == true){ col.showHint = true; } if(header.cellType){ col.data.cellType = getCellType(header); } if(header.decimalField){//设置formatter let decimal = getDecimal(header.decimalField); col.formatter = getFormatter(decimal); } if(header.getText && treeCol){ col.data.getText = treeCol.getEvent(header.getText); } /*col.readOnly = function (node) { if(node.data.ParentID == -1 || node.data.id == 'GJ'){//三材类别项不能编辑) return true; } return false; };*/ return col; } function getCellType(header) { return function () { if(header.cellType === "checkBox"){ return new GC.Spread.Sheets.CellTypes.CheckBox(); } if(header.cellType === "comboBox"){ let dynamicCombo = sheetCommonObj.getDynamicCombo(true); if(header.options){ dynamicCombo.itemHeight(header.options.length).items(header.options); if(header.editorValueType==true){ dynamicCombo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value); } } return dynamicCombo } } } }, //注册自定义回车键事件 bindEnterKey: function (workBook, operation) { workBook.commandManager().register('myEnter', operation); workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.enter, false, false, false, false); workBook.commandManager().setShortcutKey('myEnter', GC.Spread.Commands.Key.enter, false, false, false, false); }, //解决esc后触发了编辑结束的保存事件,显示与实际数据不同问题 bindEscKey: function (workBook, sheets) { function isDef(v){ return typeof v !== 'undefined' && v !== null; } workBook.commandManager().register('myEsc', function () { let activeSheet = workBook.getActiveSheet(); let hasTheSheet = false; for(let sheetObj of sheets){ let sheet = sheetObj.sheet; if(sheet === activeSheet){ hasTheSheet = true; let editStarting = sheetObj.editStarting; let editEnded = sheetObj.editEnded; if(editStarting){ sheet.unbind(GC.Spread.Sheets.Events.EditStarting); } if(editEnded){ sheet.unbind(GC.Spread.Sheets.Events.EditEnded); } let row = sheet.getActiveRowIndex(); let col = sheet.getActiveColumnIndex(); let orgV = sheet.getValue(row, col); let orgText = sheet.getText(row, col); if(!isDef(orgV)){ orgV = ''; } if(sheet.isEditing()){ sheet.endEdit(); sheet.setValue(row, col, orgV); } if(editStarting){ sheet.bind(GC.Spread.Sheets.Events.EditStarting, editStarting); } if(editEnded){ sheet.bind(GC.Spread.Sheets.Events.EditEnded, editEnded); } } } //容错处理,以防没把所有工作簿的表格信息传入参数 if(!hasTheSheet){ if(activeSheet.isEditing()){ activeSheet.endEdit(); } } }); workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.esc, false, false, false, false); workBook.commandManager().setShortcutKey('myEsc', GC.Spread.Commands.Key.esc, false, false, false, false); }, //设置默认样式 spreadDefaultStyle: function (workBook) { let defaultStyle = new GC.Spread.Sheets.Style(); defaultStyle.font = '14px Calibri'; let sheetCount = workBook.getSheetCount(); for(let i = 0; i < sheetCount; i++){ let sheet = workBook.getSheet(i); sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport); sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.colHeader); sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.rowHeader); } }, //动态根据工作簿宽度和各列宽度比例设置宽度 setColumnWidthByRate: function (workBookWidth, workBook, headers){ if(workBook){ const sheet = workBook.getActiveSheet(); sheet.suspendEvent(); sheet.suspendPaint(); for(let col = 0; col < headers.length; col++){ if(headers[col]['rateWidth'] !== undefined && headers[col]['rateWidth'] !== null && headers[col]['rateWidth'] !== ''){ sheet.setColumnWidth(col, workBookWidth * headers[col]['rateWidth'], GC.Spread.Sheets.SheetArea.colHeader) } else { if(headers[col]['headerWidth'] !== undefined && headers[col]['headerWidth'] !== null && headers[col]['headerWidth'] !== ''){ sheet.setColumnWidth(col, headers[col]['headerWidth'], GC.Spread.Sheets.SheetArea.colHeader) } } } sheet.resumeEvent(); sheet.resumePaint(); } }, drowRect:function (ctx, x, y, w, h,rectW,rectH,margin) { ctx.save(); ctx.strokeStyle = "gray"; ctx.translate(0.5, 0.5); ctx.beginPath(); let rectX = x + margin; let rectY = y + Math.round(h / 2) - rectH / 2; ctx.moveTo(rectX, rectY); ctx.lineTo(rectX, rectY + rectH); ctx.lineTo(rectX + rectW, rectY + rectH); ctx.lineTo(rectX + rectW, rectY); ctx.lineTo(rectX, rectY); ctx.moveTo(rectX + rectW, y + Math.round(h / 2)); ctx.lineTo(rectX + rectW + 5, y + Math.round(h / 2)); ctx.stroke(); ctx.restore(); }, drawLine : function (ctx, x1, y1, x2, y2, color) { let l_color = color?color:"gray"; ctx.save(); ctx.translate(0.5, 0.5); ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.strokeStyle = l_color; ctx.stroke(); ctx.restore(); }, drowSymbol :function (ctx, x, y, w, h,rectW,rectH,margin,collapsed) { ctx.save(); ctx.strokeStyle = "#000000"; ctx.translate(0.5, 0.5); ctx.beginPath(); ctx.moveTo(x + margin + 2, y + Math.round(h / 2)); ctx.lineTo(x + margin + 8, y + Math.round(h / 2)); let rectY = y + Math.round(h / 2) - rectH / 2; if (collapsed) { ctx.moveTo(x + margin + rectW / 2, rectY + 2); ctx.lineTo(x + margin + rectW / 2, rectY + 2 + 6); } ctx.stroke(); ctx.restore(); }, drowTriangle:function(ctx,x,y){//画向下三角形 ctx.save(); ctx.fillStyle = "black"; ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x-3, y -6); ctx.lineTo(x+3, y -6); ctx.fill(); ctx.restore(); }, drowSubItem: function (ctx, x, y, w, h, offset, hasNext,step) { let t_step = step?step:6; offset += t_step; ctx.save(); ctx.strokeStyle = "gray"; ctx.translate(0.5, 0.5); ctx.beginPath(); ctx.moveTo(x + offset, y); ctx.lineTo(x + offset, y + Math.round(h / 2)); offset += 9; ctx.lineTo(x + offset, y + Math.round(h / 2)); if (hasNext) { ctx.moveTo(x + offset - 9, y + Math.round(h / 2)); ctx.lineTo(x + offset - 9, y + h); } ctx.stroke(); ctx.restore(); return offset; } }