/** * Created by Tony on 2017/4/28. */ var sheetCommonObj = { // createSpread、initSheet 在一个Spread多个Sheet分别调用时的情况下使用。 // buildSheet 在一个Spread、一个Sheet的情况下使用。 createSpread: function(container, SheetCount){ var me = this; var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: SheetCount }); spreadBook.options.allowCopyPasteExcelStyle = false; spreadBook.options.allowExtendPasteRange = true; spreadBook.options.tabStripVisible = false; //spreadBook.options.showHorizontalScrollbar = false; spreadBook.options.allowUserDragDrop = false; spreadBook.options.scrollbarMaxAlign = true; return spreadBook; }, initSheet: function(sheet, setting, rowCount) { var me = this; var spreadNS = GC.Spread.Sheets; sheet.suspendPaint(); sheet.suspendEvent(); sheet.setRowCount(1, spreadNS.SheetArea.colHeader); sheet.setColumnCount(setting.header.length, spreadNS.SheetArea.viewport); sheet.options.colHeaderAutoTextIndex = 1; sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers; sheet.options.protectionOptions = { allowResizeRows: true, allowResizeColumns: true }; sheet.showRowOutline(false); me.buildHeader(sheet, setting); if (rowCount > 0) sheet.setRowCount(rowCount); sheet.resumeEvent(); sheet.resumePaint(); }, buildSheet: function(container, setting, rowCount) { var me = this; var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 }); spreadBook.options.tabStripVisible = false; //spreadBook.options.showHorizontalScrollbar = false; spreadBook.options.scrollbarMaxAlign = true; spreadBook.options.allowCopyPasteExcelStyle = false; spreadBook.options.allowExtendPasteRange = true; spreadBook.options.allowUserDragDrop = false; var spreadNS = GC.Spread.Sheets; var sheet = spreadBook.getSheet(0); sheet.suspendPaint(); sheet.suspendEvent(); //Set rowHeader count and columnHeader count. sheet.setRowCount(1, spreadNS.SheetArea.colHeader); sheet.setColumnCount(setting.header.length, spreadNS.SheetArea.viewport); sheet.options.colHeaderAutoTextIndex = 1; sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers; sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values; sheet.options.protectionOptions = { allowResizeRows: true, allowResizeColumns: true }; sheet.showRowOutline(false); //setup column header me.buildHeader(sheet, setting); //setup cells if (rowCount > 0) sheet.setRowCount(rowCount); sheet.resumeEvent(); sheet.resumePaint(); 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.setColumnWidth(i, setting.header[i].headerWidth?setting.header[i].headerWidth:100); } }, 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(); }, 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(); }, 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) { 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); for (var col = 0; col < setting.header.length; col++) { var hAlign = "left", vAlign = "center"; if (setting.header[col].hAlign) { hAlign = setting.header[col].hAlign; } else if (setting.header[col].dataType !== "String"){ hAlign = "right"; } vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign; me.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign); if (setting.header[col].formatter) { //var style = new GC.Spread.Sheets.Style(); //style.formatter = setting.header[col].formatter; //sheet.setStyle(row,col,style,GC.Spread.Sheets.SheetArea.viewport); sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport); } if(setting.header[col].cellType === "checkBox"||setting.header[col].cellType === "button"){//clear and reset var me = this, header = GC.Spread.Sheets.SheetArea.colHeader; sheet.deleteColumns(col,1); sheet.addColumns(col, 1); sheet.setValue(0, col, setting.header[col].headerName, header); sheet.setColumnWidth(col, setting.header[col].headerWidth?setting.header[col].headerWidth:100); } for (var row = 0; row < data.length; row++) { //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport); var val = data[row][setting.header[col].dataCode]; if(val&&setting.header[col].dataType === "Number"){ if(setting.header[col].hasOwnProperty('tofix')){ val =parseFloat(val).toFixed(setting.header[col].tofix); }else { val =parseFloat(val).toFixed(2); } } if(val!=null&&setting.header[col].cellType === "checkBox"){ this.setCheckBoxCell(row,col,sheet,val) } sheet.setValue(row, col, val, ch); } } this.lockCells(sheet,setting); sheet.resumeEvent(); sheet.resumePaint(); //me.shieldAllCells(sheet); }, analyzePasteData: function(setting, pastedInfo) { var rst = [], propId = pastedInfo.cellRange.col, preStrIdx = 0, itemObj = {}; for (var i = 0; i < pastedInfo.pasteData.text.length; i++) { if (pastedInfo.pasteData.text[i] === "\n") { propId = pastedInfo.cellRange.col; preStrIdx = i + 1; rst.push(itemObj); if (i < pastedInfo.pasteData.text.length - 1) { itemObj = {}; } } else if (pastedInfo.pasteData.text[i] === "\t" || pastedInfo.pasteData.text[i] === "\r") { itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx, i); propId++; preStrIdx = i + 1; //if the last copied-cell were empty, should check whether the end of text if (i == pastedInfo.pasteData.text.length - 1) { itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx); rst.push(itemObj); } } else if (i == pastedInfo.pasteData.text.length - 1) { itemObj[setting.header[propId].dataCode] = pastedInfo.pasteData.text.slice(preStrIdx); rst.push(itemObj); } } return rst; }, combineRowData: function(sheet, setting, row) { var rst = {}; for (var col = 0; col < setting.header.length; col++) { rst[setting.header[col].dataCode] = sheet.getValue(row, col); } return rst; }, shieldAllCells: function(sheet) { sheet.options.isProtected = true; }, unShieldAllCells: function(sheet) { sheet.options.isProtected = false; }, unLockAllCells: function (sheet) { sheet.suspendPaint(); sheet.suspendEvent(); let defaultStyle = new GC.Spread.Sheets.Style(); defaultStyle.locked = false; sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport); sheet.setStyle(-1, 0, defaultStyle); sheet.options.isProtected = false; sheet.resumePaint(); sheet.resumeEvent(); }, lockAllCells: function (sheet) { sheet.suspendPaint(); sheet.suspendEvent(); let defaultStyle = new GC.Spread.Sheets.Style(); defaultStyle.locked = true; sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport); for(let i = 0; i < sheet.getRowCount(); i++){ sheet.setStyle(i, 0, defaultStyle); } sheet.options.isProtected = true; sheet.resumePaint(); sheet.resumeEvent(); }, lockCells: function(sheet, setting){ sheet.suspendPaint(); sheet.suspendEvent(); if (setting && setting.view.lockColumns && setting.view.lockColumns.length > 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); } } sheet.resumePaint(); sheet.resumeEvent(); }, setLockCol: function (sheet, col, isLocked) { sheet.suspendPaint(); sheet.suspendEvent(); for(let row = 0, len = sheet.getRowCount(); row < len; row++){ sheet.getCell(row, col).locked(isLocked); } sheet.resumePaint(); sheet.resumeEvent(); }, 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 //动态下拉框 getDynamicCombo: function () { 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()) { 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()) { return GC.Spread.Sheets.CellTypes.ComboBox.prototype.getHitInfo.apply(this, arguments); } else { return GC.Spread.Sheets.CellTypes.Base.prototype.getHitInfo.apply(this, arguments); } }; return new ComboCellForActiveCell(); }, 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); 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(); } }