找回密码
 立即注册

QQ登录

只需一步,快速开始

秋辞

初级会员

24

主题

50

帖子

218

积分

初级会员

积分
218
秋辞
初级会员   /  发表于:2022-8-21 11:34  /   查看:1325  /  回复:5
30金币
本帖最后由 秋辞 于 2022-8-22 11:40 编辑

想实现效果类似这种, image.png170669554.png ,demo里的数据结构可以变,我已经放上了现在的数据结构。可以在demo里给实现一下吗?谢谢 image.png162240294.png

databind_vue.zip

113 KB, 下载次数: 31

最佳答案

查看完整内容

主要代码是在colInfo中,分别获取计划时间和完成时间,然后设置列头为两行,进行合并单元格。最后实现效果为:

5 个回复

倒序浏览
最佳答案
最佳答案
沉沉悬赏达人认证
金牌服务用户   /  发表于:2022-8-21 11:34:06
来自 3#
主要代码是在colInfo中,分别获取计划时间和完成时间,然后设置列头为两行,进行合并单元格。
  1.     const data = [
  2.         {
  3.             "PATIENT_ID": "932418",
  4.             "PATIENT_NAME": "张茂堃",
  5.             "AGE": "25岁",
  6.             "jiaGong":{planTime:'2021-01-01',finishTime:'2021-01-02'}
  7.         }, {
  8.             "PATIENT_ID": "932418",
  9.             "PATIENT_NAME": "张茂堃",
  10.             "AGE": "25岁",
  11.             "jiaGong":{planTime:'2021-01-01',finishTime:'2021-01-02'}
  12.         }
  13.     ]
  14.     var colInfos = [
  15.         { name: 'PATIENT_ID', displayName: '病人ID', size: 70, visible: false },
  16.         { name: 'PATIENT_NAME', displayName: '姓名', size: 60,pageBread: false },
  17.         { name: 'AGE', displayName: '年龄', size: 120 },
  18.         { displayName: '计划时间', size: 60 ,value:function (item){
  19.                 return item.jiaGong.planTime
  20.             }},
  21.         { displayName: '完成时间', size: 60 ,value:function (item){
  22.                 return item.jiaGong.finishTime
  23.             }},
  24.     ];
  25.     sheet.autoGenerateColumns  = false;
  26.     sheet.bindColumns(colInfos)
  27.     sheet.setDataSource(data);
  28.     sheet.setRowCount(2,GC.Spread.Sheets.SheetArea.colHeader)
  29.     sheet.addSpan(0, 0, 2, 1, GC.Spread.Sheets.SheetArea.colHeader);
  30.     sheet.setValue(0, 0, "", GC.Spread.Sheets.SheetArea.colHeader);

  31.     sheet.addSpan(0, 1, 2, 1, GC.Spread.Sheets.SheetArea.colHeader);
  32.     sheet.setValue(0, 1, "姓名", GC.Spread.Sheets.SheetArea.colHeader);

  33.     sheet.addSpan(0, 2, 2, 1, GC.Spread.Sheets.SheetArea.colHeader)
  34.     sheet.setValue(0,2,"年龄",GC.Spread.Sheets.SheetArea.colHeader);

  35.     sheet.addSpan(0, 3, 1, 2, GC.Spread.Sheets.SheetArea.colHeader);
  36.     sheet.setValue(0,3, '加工',GC.Spread.Sheets.SheetArea.colHeader);
复制代码
最后实现效果为: image.png431160888.png


评分

参与人数 1满意度 +5 收起 理由
秋辞 + 5

查看全部评分

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-22 11:59:44
2#
你说的这种拆分单元格可以通过自定义单元格实现,具体可以参考一下在线示例中,第二列的写法,包括了显示和编辑
https://demo.grapecity.com.cn/sp ... types/custom/purejs

代码稍微修改后的效果
image.png307924498.png

修改了69行开始paint方法中的代码

  1. if (value) {
  2.                 spreadNS.CellTypes.Base.prototype.paint.apply(this, [ctx, value.firstName, x, y, w, h, style, options]);
  3.                 spreadNS.CellTypes.Base.prototype.paint.apply(this, [ctx, value.lastName, x+100, y, w, h, style, options]);

  4.                 if (!ctx) {
  5.                 return;
  6.             }

  7.             ctx.save();

  8.             // draw inside the cell's boundary
  9.             ctx.rect(x, y, w, h);
  10.             ctx.clip();
  11.             ctx.beginPath();

  12.             ctx.moveTo(x+100,y);
  13.             ctx.lineTo(x+100,y+h);
  14.             ctx.lineWidth = 0.5;
  15.             console.log(style);
  16.             
  17.             ctx.stroke();

  18.             ctx.restore();
复制代码


回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-22 13:53:04
4#
我明白你的意思,按照你现在的数据源结构没有办法做成这样,

如果你是希望这个实际就是两列的话,那么绑定的数据源中,“计划时间”和“完成时间”应该实际就是2列,最后表头只是加1行,然后合并单元格,效果如下

image.png459983519.png

image.png210549925.png

当然,其他列的列头两行,也可以通过代码进行合并,这样看起来更好看一些


评分

参与人数 1满意度 +5 收起 理由
秋辞 + 5

查看全部评分

回复 使用道具 举报
秋辞
初级会员   /  发表于:2022-8-24 12:16:18
5#
Richard.Ma 发表于 2022-8-22 11:59
你说的这种拆分单元格可以通过自定义单元格实现,具体可以参考一下在线示例中,第二列的写法,包括了显示和 ...

感觉这种解决方式对用户来说还是太复杂,就不如给两行关键代码。已经用您下面给的那种方式解决了,谢谢~
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-24 12:33:38
6#
好的,问题解决就行,这个确实是两种思路,取决于你这边的数据源结构,数据源结构可以改动的话,两列独立开确实是最好的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部