找回密码
 立即注册

QQ登录

只需一步,快速开始

lynn8588

金牌服务用户

40

主题

161

帖子

413

积分

金牌服务用户

积分
413
lynn8588
金牌服务用户   /  发表于:2022-12-29 11:03  /   查看:1046  /  回复:1
请教一下,在合并单元格的时候,如果两个需要合并的单元格,左边单元格内容为空,右边单元格内容为100,将两个单元格使用工具栏上的合并单元格命令合并以后,单元格内容变空了,如下图所示:
image.png926100463.png
合并后效果:
image.png430556640.png
这种问题怎么解决?
Excel上我们试过,是可以的~
谢谢~

1 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-12-29 14:02:38
沙发
本帖最后由 Richard.Ma 于 2022-12-29 14:32 编辑

是的,这块目前和excel的逻辑稍有不同
在两个单元格合并且左上角单元格为空时:
spread会直接合并为左侧的单元格
excel会先把右侧的单元格值给左侧单元格,然后再合并。(你可以测试再次取消合并,会发现左侧单元格有值,右侧单元格反而没值了)

在spreadjs在线编辑器中要实现相同功能的话,可以直接重写一下合并单元格按钮的command来实现


具体demo可以参考下面的链接

https://jscodemine.grapecity.com ... Fsrc%2Fapp.js%22%7D

核心代码

  1. var config = GC.Spread.Sheets.Designer.DefaultConfig;
  2. rewriteMregeCell(config);
  3. designer.setConfig(config);


  4. //重写合并居中单元格按钮,补充在左上角单元格为空时,使用后续的单元格为合并单元格的值
  5. function rewriteMregeCell(config){

  6.       let newcommand=GC.Spread.Sheets.Designer.getCommand('mergeCenter');
  7.       let oldExecute = newcommand.execute;
  8.       
  9.       newcommand.execute = function (context, propertyName, args) {

  10.             let sheet=new GC.Spread.Sheets.Worksheet();
  11.             sheet=context.Spread.getActiveSheet();
  12.             var selections=sheet.getSelections();
  13.             
  14.             selections.forEach((selection)=>{

  15.                   if(sheet.getValue(selection.row,selection.col)==null){
  16.                         
  17.                         for (let i = selection.row; i <selection.row+selection. rowCount; i++) {
  18.                               for (let j = selection.col; j <selection.col+selection.colCount; j++) {
  19.                      
  20.                                     if (sheet.getValue(i, j) !== null) {
  21.                                           sheet.setValue(selection.row,selection.col,sheet.getValue(i,j));
  22.                                           break;
  23.                                     }
  24.                               }
  25.                           }
  26.                   }
  27.             });
  28.             oldExecute.call(this, context, propertyName, args);

  29.       }
  30.       config.commandMap={};
  31.       config.commandMap['mergeCenter'] = newcommand;
  32. }
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部