找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-10-30 17:41  /   查看:838  /  回复:0
本帖最后由 Richard.Ma 于 2023-10-30 17:42 编辑

SpreadJS和Excel由于设计的差异,在一些行为上存在不同。当选中区域后,使用快捷键【Ctrl+Shift+↓】来进行向下扩展选中区域的时候,

  • SpreadJS会直接将当前选中区域的尾行直接扩展到sheet最下方
test.gif838575134.png



  • Excel会根据文字区域逐个向下扩展
test.gif644007262.png



在使用spreadjs的过程中,如果想要spreadJS能实现同样的效果,我们可以通过重写spreadJS给【Ctrl+Shift+↓】绑定的命令selectionBottom来实现


首先定义一个command,在其中通过spreadJS提供的search方法,设置选项通配符匹配,通过"?" 来匹配选中区域下方的非空单元格。然后修改选中区域范围

  1. var selectionBottomCmd = {
  2.                         canUndo: true,
  3.                         execute: function(spread, options, isUndo) {
  4.                                 var Commands = GC.Spread.Sheets.Commands;
  5.                                 if (isUndo) {
  6.                                         Commands.undoTransaction(spread, options);
  7.                                         return true;
  8.                                 } else {
  9.                                         Commands.startTransaction(spread, options);
  10.                             console.log("start");
  11.                                         spread.suspendPaint();
  12.                             var sheet = spread.getActiveSheet();
  13.                                         var selections = sheet.getSelections();
  14.                                         var newselection=[];

  15.                             selections.forEach((selection)=>{
  16.                                 var searchCondition = new GC.Spread.Sheets.Search.SearchCondition();
  17.                                 searchCondition.searchString = "?";
  18.                                 searchCondition.startSheetIndex = spread.getActiveSheetIndex();
  19.                                 searchCondition.endSheetIndex = spread.getActiveSheetIndex();
  20.                                 searchCondition.columnStart = selection.col;
  21.                                 searchCondition.columnEnd = selection.col+selection.colCount-1;
  22.                                 searchCondition.rowStart = selection.row+selection.rowCount;
  23.                                 searchCondition.rowEnd = sheet.getRowCount()-1;
  24.                                 searchCondition.searchFlags = GC.Spread.Sheets.Search.SearchFlags.ignoreCase| GC.Spread.Sheets.Search.SearchFlags.useWildCards|GC.Spread.Sheets.Search.SearchFlags.blockRange;
  25.                                 var searchresult= sheet.search(searchCondition);
  26.                                             var newendrowindx=searchresult.foundRowIndex!=-1?searchresult.foundRowIndex:sheet.getRowCount()-1;
  27.                                             newselection.push(new GC.Spread.Sheets.Range(selection.row,selection.col,newendrowindx-selection.row+1,selection.colCount))
  28.                                 
  29.                             });
  30.                                         sheet.clearSelection();
  31.                                         newselection.forEach((selection)=>{
  32.                                                 console.log(selection);
  33.                                                 if(selection)
  34.                                                 sheet.addSelection(selection.row,selection.col,selection.rowCount,selection.colCount)
  35.                                          })
  36.                                         spread.resumePaint();
  37.                                         Commands.endTransaction(spread, options);
  38.                                         return true;
  39.                                 }
  40.                         }
  41.                 };
复制代码


将这个创建的command 注册为名称为"selectionBottom"的command来覆盖原有的同名命令,注册的同时也给设置了相同的快捷键【Ctrl+Shift+↓】
这里的40是向下箭头对应的KeyCode。


  1.   var commandManager = spread.commandManager();
  2.   commandManager.register('selectionBottom', selectionBottomCmd,40,true,true);
复制代码


接下来,你可以看到在SpreadJS中点击上述快捷键。也实现了和Excel相同的向下扩展选中你的效果


最后,附上上述代码的完整demo

OverrideSelectionBottom.zip (2.03 KB, 下载次数: 19)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部