找回密码
 立即注册

QQ登录

只需一步,快速开始

xiaolong

金牌服务用户

97

主题

378

帖子

1033

积分

金牌服务用户

积分
1033

[已处理] 关于合并单元格

xiaolong
金牌服务用户   /  发表于:2024-4-29 14:54  /   查看:4118  /  回复:8
1金币
wijmo能做到这种程度的合并吗,需要按照5个层级依次去合并单元格,如果可以的话麻烦帮忙写个类似的demo
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这个在线demo中看,是对比了当前列和上一列的单元格值是否一致,以此决定单元格是否向上向下合并, 你的需求实际上是对比当前单元格左侧所有列的对应单元格值都是否一致,都一致才向上向下合并,因此,可以做如下改写

8 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-7-24 18:32:39
9#
有类似问题可以重新发个帖子。
回复 使用道具 举报
cc.
注册会员   /  发表于:2024-7-24 16:37:33
8#
你好我想问一下,最后解决了吗?是用的什么方法?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-30 15:21:29
6#
你可以上传一个复现问题的demo,我帮你看看是什么原因
回复 使用道具 举报
xiaolong
金牌服务用户   /  发表于:2024-4-30 12:21:29
5#
Richard.Ma 发表于 2024-4-30 10:54
你截图里面我没有看出来有什么问题,“编辑”没有合并是由于前一列数据不同

如果你是需要完全自定义合并 ...

这个是依据发的链接最终完成的样子,这个只是我希望最终得到的样子。压根就没有因为前一列的数据不同不合并啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-30 10:54:18
4#
你截图里面我没有看出来有什么问题,“编辑”没有合并是由于前一列数据不同

如果你是需要完全自定义合并的话,参考这个就行,自己添加合并单元格
https://demo.grapecity.com.cn/wi ... ustomMerging/purejs
回复 使用道具 举报
xiaolong
金牌服务用户   /  发表于:2024-4-29 18:25:40
3#
Richard.Ma 发表于 2024-4-29 17:38
你需要的事故Restricted Merging

可以参考这个demo

似乎不满足,需要按照层级判断,前几层有一个数据不满足,哪怕数据一样也不能合并

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-29 17:38:50
2#
本帖最后由 Richard.Ma 于 2024-5-6 10:13 编辑

你需要的是Restricted Merging

可以参考这个demo
https://demo.grapecity.com.cn/wi ... ictedMerging/purejs

拖动1,2列的列头,切换2列,就能直观看到你需要的效果了:仅当上一列中的单元格包含相同的值时,才垂直合并单元格


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-29 14:54:58
来自 7#
这个在线demo中看,是对比了当前列和上一列的单元格值是否一致,以此决定单元格是否向上向下合并,

你的需求实际上是对比当前单元格左侧所有列的对应单元格值都是否一致,都一致才向上向下合并,因此,可以做如下改写

  1. RestrictedMergeManager.prototype.getMergedRange = function(p, r, c, clip) {
  2.                         if(clip === void 0) {
  3.                                 clip = true;
  4.                         }
  5.                         var rng = null;
  6.                         rng = new wjGrid.CellRange(r, c);
  7.                        
  8.                         var pcol = c > 0 ? c - 1 : c;
  9.                         var val = p.getCellData(r, c, false);
  10.                         var pval = p.getCellData(r, pcol, false);
  11.                         var array = [];
  12.                         for(let j = 0; j <= c; j++) {
  13.                                 array.push(j);
  14.                         }
  15.                         while(
  16.                                 rng.row > 0 &&
  17.                                 array.every(
  18.                                         (col) =>
  19.                                         p.getCellData(rng.row - 1, col, false) == p.getCellData(rng.row, col, false)
  20.                                 )
  21.                         ) {
  22.                                 rng.row--;
  23.                         }
  24.                         while(
  25.                                 rng.row2 < p.rows.length - 1 &&
  26.                                 array.every(
  27.                                         (col) =>
  28.                                         p.getCellData(rng.row2 + 1, col, false) == p.getCellData(rng.row2, col, false)
  29.                                 )
  30.                         ) {
  31.                                 rng.row2++;
  32.                         }
  33.                        

  34.                         if(rng.isSingleCell) {
  35.                                 rng = null;
  36.                         }
  37.                         return rng;
  38.                 };
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部