您好:
这个问题是代码执行顺序的问题,因为更改Style会触发cellchange,而当所有的cellchange全部触发完毕后才会进行repaint,所以后面触发的cellchanged内容,会将在之前设定的内容覆盖掉,导致您描述的问题,解决方法是设置setTimeOut来更改代码执行的顺序,更改后的代码在下面,您可以参考一下:
- $(document).ready(function () {
- var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 3 });
- initSpread(spread);
- });
- function initSpread(spread) {
- var spreadNS = GC.Spread.Sheets;
- var sd = dataSource;
- var sheet = spread.getActiveSheet();
- if (sd.length > 0) {
- sheet.setDataSource(sd);
- }
- sheet.setColumnWidth(0, 160);
- sheet.setColumnWidth(1, 70);
- sheet.setColumnWidth(2, 90);
- sheet.setColumnWidth(3, 110);
- sheet.setColumnWidth(4, 80);
- sheet.setColumnWidth(6, 110);
- spread.bind(spreadNS.Events.CellChanged, function (e, args) {
- //spread.suspendPaint();
- //spread.suspendCalcService(false);
- //spread.suspendEvent();
- if (args.propertyName === 'value') {
- if (args.newValue !== undefined && args.newValue !== null) {
- var style = new spreadNS.Style();
- style.backColor = 'rgb(255,255,255)';
- setTimeout(function(){
- args.sheet.setStyle(args.row, args.col, style);
- },0);
-
- } else {
- var style = new spreadNS.Style();
- style.backColor = 'rgb(255,255,204)';
- setTimeout(function(){
- args.sheet.setStyle(args.row, args.col, style);
- },0);
-
- }
- }
- //spread.resumeEvent();
- //spread.resumeCalcService(false);
- //spread.resumePaint()
- });
-
-
- spread.bind(spreadNS.Events.RangeChanged, function (e, args) {
- //spread.suspendPaint();
- //spread.suspendCalcService(false);
- //spread.suspendEvent();
- let len = args.changedCells.length;
- for (let i = 0; i < len; i++) {
- let cell = args.changedCells[i];
- let value = sheet.getValue(cell.row, cell.col);
- if (value !== undefined && value !== null) {
- var style = new spreadNS.Style();
- style.backColor = 'rgb(255,255,255)';
- args.sheet.setStyle(cell.row, cell.col, style);
- } else {
- var style = new spreadNS.Style();
- style.backColor = 'rgb(255,255,204)';
- args.sheet.setStyle(cell.row, cell.col, style);
- }
- }
- //spread.resumeEvent();
- //spread.resumeCalcService(false);
- //spread.resumePaint()
- });
- };
复制代码 |