您好,
首先,要实现仅仅观察时单元格样式改变而不影响文档的保存,
只能通过自定义单元格类型的paint来实时绘制。
其次,paint方法影响的也只是当前用户观察到的区域,
因此性能上影响不大。
我这边按照这个思路做了一个完整的Demo,您可以引入您的工程中测试一下性能。
我先贴代码,完整的Demo在附件中:
- var spreadNS = GC.Spread.Sheets;
- var sels = [];
- // 重写Base类型
- var CustomBase = spreadNS.CellTypes.Base;
- var oldPaint = spreadNS.CellTypes.Base.prototype.paint;
- CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
- if (!context) {
- return;
- }
- if(this.showEffect){
- if(sels && sels.length !== 0){
- var row = ctx.row, col = ctx.col;
- sels.forEach(function (sel) {
- var rowSpan = sel.row + sel.rowCount;
- var colSpan = sel.col + sel.colCount;
- if(row >= sel.row && row < rowSpan
- || col >= sel.col && col < colSpan){
- style.backColor = "red";
- }
- })
- }
- }
- oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
- };
- $(document).ready(function () {
- var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
- var sheet = spread.getSheet(0);
- sheet.suspendPaint();
- sheet.setRowHeight(0, 60);
- sheet.setColumnWidth(0, 150);
- var myCellType = new spreadNS.CellTypes.Text();
- myCellType.showEffect = true;
- sheet.setCellType(-1,-1, myCellType);
- sheet.resumePaint();
- spread.bind(GC.Spread.Sheets.Events.SelectionChanged, function (s, e) {
- sels = e.newSelections;
- sheet.repaint();
- });
- });
复制代码 |