/** * Created by Mai on 2017/8/14. */ let ColSettingObj = { colSetting: null, DEFAULT_TITLE_STYLE: null, DEFAULT_DATA_STYLE: null, cellType: { getText: null, readOnly: null }, Rows: {data: 0, filedName: 0, getText: 1, width: 2, readOnly: 3}, columnValueChanged: function (e, info) { let that = ColSettingObj; info.colList.forEach(function (iCol) { info.sheet.setValue(that.colSetting.headRows + that.Rows.width, iCol, info.sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport); }); }, valueChanged: function (e, info) { let that = ColSettingObj; if (info.row === that.colSetting.headRows + that.Rows.width) { info.sheet.setColumnWidth(info.col, info.newValue, GC.Spread.Sheets.SheetArea.viewport); } }, selectionChanged: function (e, info) { let that = ColSettingObj, sel = info.newSelections[0]; if (sel.row <= that.colSetting.headRows) { $('.btn-toolbar').removeClass('disabled'); $('#font').val(info.sheet.getCell(sel.row, sel.col, GC.Spread.Sheets.SheetArea.viewport).font()); } else { $('.btn-toolbar').addClass('disabled'); } }, getCellStyle: function (font, hAlign, vAlign) { var style = new GC.Spread.Sheets.Style(); style.font = font; style.hAlign = hAlign; style.vAlign = vAlign; style.wordWrap = true; return style; }, initCellType: function () { this.cellType.readOnly = new GC.Spread.Sheets.CellTypes.ComboBox(); this.cellType.readOnly.items([true, false, 'readOnly.bills', 'readOnly.ration', 'readOnly.volumePrice', 'readOnly.non_bills', 'readOnly.non_ration', 'readOnly.non_volumePrice', 'readOnly.billsParent', 'readOnly.forCalcBase' ]); this.cellType.getText = new GC.Spread.Sheets.CellTypes.ComboBox(); this.cellType.getText.items(['getText.type']); }, initSheet: function (sheet, setting) { sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.rowHeader); sheet.setColumnWidth(0, 80, GC.Spread.Sheets.SheetArea.rowHeader); sheet.setColumnWidth(1, 70, GC.Spread.Sheets.SheetArea.rowHeader); sheet.setRowCount(setting.headRows + this.Rows.readOnly + 1); sheet.setText(setting.headRows + this.Rows.data, 0, 'Data', GC.Spread.Sheets.SheetArea.rowHeader); sheet.setStyle(setting.headRows + this.Rows.data, -1, this.DEFAULT_DATA_STYLE); sheet.addSpan(setting.headRows + this.Rows.data, 0, 2, 1, GC.Spread.Sheets.SheetArea.rowHeader); sheet.setText(setting.headRows + this.Rows.filedName, 1, 'FieldName', GC.Spread.Sheets.SheetArea.rowHeader); sheet.setText(setting.headRows + this.Rows.getText, 1, 'getText', GC.Spread.Sheets.SheetArea.rowHeader); sheet.setText(setting.headRows + this.Rows.width, 0, 'width', GC.Spread.Sheets.SheetArea.rowHeader); sheet.addSpan(setting.headRows + this.Rows.width, 0, 1, 2, GC.Spread.Sheets.SheetArea.rowHeader); sheet.setText(setting.headRows + this.Rows.readOnly, 0, 'ReadOnly', GC.Spread.Sheets.SheetArea.rowHeader); sheet.addSpan(setting.headRows + this.Rows.readOnly, 0, 1, 2, GC.Spread.Sheets.SheetArea.rowHeader); }, initColSetting: function (setting) { this.DEFAULT_TITLE_STYLE = this.getCellStyle('Arial', GC.Spread.Sheets.HorizontalAlign.center, GC.Spread.Sheets.VerticalAlign.center); this.DEFAULT_DATA_STYLE = this.getCellStyle('Arial', GC.Spread.Sheets.HorizontalAlign.left, GC.Spread.Sheets.VerticalAlign.center); this.initCellType(); $('#empty-rows').val(setting.emptyRows); $('#col-count').val(setting.cols ? setting.cols.length : 0); $('#header-row-count').val(setting.headRows); colEditSpread = new GC.Spread.Sheets.Workbook($('#colEditSpread')[0], {sheetCount: 1}); colEditSpread.options.tabStripVisible = false; colEditSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, this.columnValueChanged); colEditSpread.bind(GC.Spread.Sheets.Events.ValueChanged, this.valueChanged); colEditSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, this.selectionChanged); this.initSheet(colEditSpread.getActiveSheet(), setting); this.setColCount(this.colSetting.cols.length); this.setHeaderRowCount(this.colSetting.headRows); if (setting.cols) { let sheet = colEditSpread.getActiveSheet(), iRow; for (let iCol = 0; iCol < setting.cols.length; iCol++) { let col = setting.cols[iCol], iRow = 0; // header for (let i in col.head.spanCols) { if (col.head.spanCols[i] !== 0) { let cell = sheet.getCell(iRow, iCol, GC.Spread.Sheets.SheetArea.viewport); cell.value(col.head.titleNames[i]).font(col.head.font[i]).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]); } if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) { sheet.addSpan(iRow, iCol, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.viewport); } iRow += col.head.spanRows[i]; }; // data // field let cell = sheet.getCell(this.colSetting.headRows + this.Rows.data, iCol, GC.Spread.Sheets.SheetArea.viewport); cell.value(col.data.field).font(col.data.font).hAlign(col.head.hAlign).vAlign(col.data.vAlign); // getText cell = sheet.getCell(this.colSetting.headRows + this.Rows.getText, iCol, GC.Spread.Sheets.SheetArea.viewport); cell.cellType(this.cellType.getText).value(col.data.getText).hAlign(GC.Spread.Sheets.HorizontalAlign.right); // 列宽 sheet.setColumnWidth(iCol, col.width); sheet.setValue(this.colSetting.headRows + this.Rows.width, iCol, sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport); // readonly cell = sheet.getCell(this.colSetting.headRows + this.Rows.readOnly, iCol, GC.Spread.Sheets.SheetArea.viewport); cell.cellType(this.cellType.readOnly).value(col.readOnly).hAlign(GC.Spread.Sheets.HorizontalAlign.right); } } let cell = info.sheet.getCell(0, 0, GC.Spread.Sheets.SheetArea.viewport); if (cell) { $('#font').val(cell.font()); } }, setColCount: function (count) { let sheet = colEditSpread.getActiveSheet(); sheet.setColumnCount(count); for (let iCol = 0; iCol < sheet.getColumnCount(); iCol++) { sheet.setValue(this.colSetting.headRows + this.Rows.width, iCol, sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport); sheet.getCell(this.colSetting.headRows + this.Rows.readOnly, iCol, GC.Spread.Sheets.SheetArea.viewport).cellType(this.cellType.readOnly); sheet.setValue(this.colSetting.headRows + this.Rows.readOnly, iCol, false, GC.Spread.Sheets.SheetArea.viewport); } }, setHeaderRowCount: function (count) { let sheet = colEditSpread.getActiveSheet(), orgCount = this.colSetting.headRows; if (count < orgCount) { sheet.deleteRows(count, orgCount - count); } else if (count > orgCount) { sheet.addRows(orgCount, count - orgCount); sheet.addSpan(0, 0, count, 1, GC.Spread.Sheets.SheetArea.rowHeader); for (let iRow = orgCount; iRow < count; iRow++) { sheet.setStyle(iRow, -1, this.DEFAULT_TITLE_STYLE); } } }, getActualCellRange: function (cellRange, rowCount, columnCount) { if (cellRange.row == -1 && cellRange.col == -1) { return new spreadNS.Range(0, 0, rowCount, columnCount); } else if (cellRange.row == -1) { return new spreadNS.Range(0, cellRange.col, rowCount, cellRange.colCount); } else if (cellRange.col == -1) { return new spreadNS.Range(cellRange.row, 0, cellRange.rowCount, columnCount); } return cellRange; }, // 批量操作Spread选择的单元格 controlSelectCells: function (spread, control) { let sheet = colEditSpread.getActiveSheet(); let sel = sheet.getSelections(), i, j; sel = this.getActualCellRange(sel[sel.length - 1], sheet.getRowCount(), sheet.getColumnCount()); for (i = 0; i < sel.rowCount; i++) { for (j = 0; j < sel.colCount; j++) { control(sheet.getCell(sel.row + i, sel.col + j)); } } }, generateColSetting: function () { let setting = {}, sheet = colEditSpread.getActiveSheet(); setting.emptyRows = parseInt($('#empty-rows').val()); setting.headRows = parseInt($('#header-row-count').val()); if ($('#is-tree').checked) { setting.treeCol = parseInt($('#treeCol').val()); } setting.headRowHeight = []; for (let iRow = 0; iRow < setting.headRows; iRow++) { setting.headRowHeight.push(sheet.getRowHeight(iRow, GC.Spread.Sheets.SheetArea.viewport)); }; setting.cols = []; for (let iCol = 0; iCol < sheet.getColumnCount(); iCol++) { let col = {}; col.width = sheet.getColumnWidth(iCol); col.readOnly = sheet.getValue(setting.headRows + this.Rows.readOnly, iCol) || false; col.head = {}; col.head.titleNames = []; col.head.spanCols = []; col.head.spanRows = []; col.head.vAlign = []; col.head.hAlign = []; col.head.font = []; for (let iRow = 0; iRow < setting.headRows; iRow++) { let cell = sheet.getCell(iRow, iCol); col.head.titleNames.push(cell.text()); let span = sheet.getSpan(iRow, iCol); if (span) { if (span.col === iCol && span.row === iRow) { col.head.spanCols.push(span.colCount); col.head.spanRows.push(span.rowCount); } else { col.head.spanCols.push(0); col.head.spanRows.push(1); } } else { col.head.spanCols.push(1); col.head.spanRows.push(1); } col.head.vAlign.push(cell.vAlign()); col.head.hAlign.push(cell.hAlign()); col.head.font.push(cell.font()); } col.data = {}; let cell = sheet.getCell(setting.headRows, iCol); col.data.field = cell.text(); col.data.vAlign = cell.vAlign(); col.data.hAlign = cell.hAlign(); col.data.font = cell.font(); // getText cell = sheet.getCell(setting.headRows + this.Rows.getText, iCol); if (cell.text() !== '') { col.data.getText = cell.text(); } setting.cols.push(col); } return setting; } }; $('#set-column').on('shown.bs.modal', function () { if (!colEditSpread) { ColSettingObj.colSetting = JSON.parse(mainTreeCol); ColSettingObj.initColSetting(ColSettingObj.colSetting); } }); $('#col-count').change(function () { ColSettingObj.setColCount(parseInt($(this).val())); }); $('#header-row-count').change(function () { ColSettingObj.setHeaderRowCount(parseInt($(this).val())); ColSettingObj.colSetting.headRows = parseInt($(this).val()); }); $('#merge').click(function () { let sheet = colEditSpread.getActiveSheet(); let sel = sheet.getSelections(); if (sel.length > 0) { sel = ColSettingObj.getActualCellRange(sel[sel.length - 1], sheet.getRowCount(), sheet.getColumnCount()); if (sel.row + sel.rowCount > ColSettingObj.colSetting.headRows) { alert('仅HeaderTitle部分可以合并单元格'); } else { sheet.addSpan(sel.row, sel.col, sel.rowCount, sel.colCount); //sheet.setTag(sel.row, sel.col, 1); } } }); $('#unmerge').click(function () { let sheet = colEditSpread.getActiveSheet(); let sel = sheet.getSelections(); if (sel.length > 0) { sel = ColSettingObj.getActualCellRange(sel[sel.length - 1], sheet.getRowCount(), sheet.getColumnCount()); sheet.suspendPaint(); for (var i = 0; i < sel.rowCount; i++) { for (var j = 0; j < sel.colCount; j++) { sheet.removeSpan(i + sel.row, j + sel.col); } } sheet.resumePaint(); } }); $('#save-col-setting').click(function () { ColSettingObj.colSetting = ColSettingObj.generateColSetting(); mainTreeCol = JSON.stringify(ColSettingObj.colSetting); $('input:hidden[name="main_tree_col"]').val(mainTreeCol); $('#set-column').modal('hide'); SheetDataHelper.loadSheetHeader(ColSettingObj.colSetting, colSpread.getActiveSheet()); }); $('#h-left').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.hAlign(GC.Spread.Sheets.HorizontalAlign.left); }); }); $('#h-center').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center); }); }); $('#h-right').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.hAlign(GC.Spread.Sheets.HorizontalAlign.right); }); }); $('#v-top').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.vAlign(GC.Spread.Sheets.VerticalAlign.top); }); }); $('#v-center').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.vAlign(GC.Spread.Sheets.VerticalAlign.center); }); }); $('#v-bottom').click(function () { ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.vAlign(GC.Spread.Sheets.VerticalAlign.bottom); }); }); $('#set-font').click(function () { var sFont = $('#font').val(); ColSettingObj.controlSelectCells(colEditSpread, function (cell) { cell.font(sFont); }); });