Clark.Pan 发表于 2021-8-1 20:42:05

在线表格编辑器在排序时实现Excel提示

在Excel中如果排序选中的单元格区域周围存在数据,那么在点击升序或者降序的时候系统会给予提示,例如下图所示:当选中区域的周围存在其他数据时,这个时候点击排序按钮,Excel会给出“发现在选定区域旁边还有数据。该数据未被选择,将不参与排序。”提示。



然而排序的功能在SpreadJS中源生是没有这样的提示的,但是SpreadJS本身的强大扩展功能支持用户通过二次开发来实现这样的需求。
以在线表格编辑器为例:
首先我们找到在线表格编辑器中排序的实现逻辑
var sortAZ = GC.Spread.Sheets.Designer.getCommand("sortAZ");然后我们将sortAZ的execute方法以变量形式保存起来,该方法中存放的就是SpreadJS源生的排序实现逻辑。
var oldSortAZExecute = sortAZ.execute;之后我们需要重写execute方法,在方法中加入逻辑判断并给予对话框提示,具体代码如下:
                        sortAZ.execute = function(context, propertyName) {
                                var activeSheet = context.getWorkbook().getActiveSheet();
                                var flag = false;
                                var selection = activeSheet.getSelections();
                               
                                for(var i=selection.row;i<selection.row+selection.rowCount;i++){
                                        if(selection.col>0){
                                                var valueLeft = activeSheet.getValue(i,selection.col-1);
                                                if(valueLeft != null){
                                                        flag = true;
                                                        break;
                                                }
                                        }
                                        if((selection.col+selection.colCount)<activeSheet.getColumnCount()){
                                                var valueRight = activeSheet.getValue(i,selection.col+selection.colCount);
                                                if(valueRight != null){
                                                        flag = true;
                                                        break;
                                                }
                                        }
                               
                                }
                               
                                if(flag){
                                        GC.Spread.Sheets.Designer.showMessageBox("发现在选定区域旁边还有数据。该数据未被选择,将不参与排序。", "提示", GC.Spread.Sheets.Designer.MessageBoxIcon.warning,function(){
                                                oldSortAZExecute.call(this, context, propertyName);
                                        });
                                }else{
                                        oldSortAZExecute.call(this, context, propertyName);
                                }
                               
                               
                               
                               
                        };

这里面主要是判断方法,根据选中的区域判断它的左右两侧是否存在数据。如果存在数据弹出提示,在提示结束后调用之前保存的源生排序逻辑进行排序。

完整的实现可以参考附件demo



页: [1]
查看完整版本: 在线表格编辑器在排序时实现Excel提示