找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2022-3-8 15:33  /   查看:2203  /  回复:0
本帖最后由 Winny 于 2022-3-8 15:54 编辑

SpreadJS种,借助数据绑定,可以很好的实现模板与数据分离。这样,对于一些个人信息填报,检测报表等场景,可以始终在服务端维持一张空表,用户填写的数据,通过调用sheet.getDataSource().getSource()就可以很方便的获取到。在后续做数据的二次分析时,这就会十分有用。<br>在一些特定的场景中,用户希望最终绑定形成的表类似于分组表,某些部分值相同时,需要自动进行合并,以下表为例: image.png93809203.png
其中红色区域内的东西,就属于需要自动根据内容合并的部分,本文会详细讲解如何使用数据绑定的方式来实现这一需求。
step1: 制作表单;<br>使用在线表格编辑器中,点击数据Tab下的工作表绑定模块,设计模板。
designTemplate.gif859451904.png

右侧的数据源列表,可以选择手动添加,也可以自己构建一个数据源json结构,关于数据源设置有不了解的可以自行在论坛搜索。
Step2:  根据绑定字段,创建源数据。
源数据一般情况,是用户多源整合查询后返回给前端的数据。这里由于只是一个前端的演示demo,直接写了一个变量(data)来代替数据源。
  1. let data = {
  2.     date: '2021-09-10',
  3.     details:[
  4.         {
  5.             num: 1,
  6.             subject: '路径',
  7.             content: '树木',
  8.             status: '',
  9.             result: '',
  10.             charge: '',
  11.             participants:''
  12.         },{
  13.             num: 1,
  14.             subject: '路径',
  15.             content: '建筑物',
  16.             status: '',
  17.             result: '',
  18.             charge: '',
  19.             participants:''
  20.         },{
  21.             num: 1,
  22.             subject: '路径',
  23.             content: '其它',
  24.             status: '',
  25.             result: '',
  26.             charge: '',
  27.             participants:''
  28.         },{
  29.             num: 2,
  30.             subject: '杆塔拉线',
  31.             content: '基础',
  32.             status: '',
  33.             result: '',
  34.             charge: '',
  35.             participants:''
  36.         },{
  37.             num: 2,
  38.             subject: '杆塔拉线',
  39.             content: '铁塔',
  40.             status: '',
  41.             result: '',
  42.             charge: '',
  43.             participants:''
  44.         },{
  45.             num: 2,
  46.             subject: '杆塔拉线',
  47.             content: '杆线',
  48.             status: '',
  49.             result: '',
  50.             charge: '',
  51.             participants:''
  52.         },{
  53.             num: 2,
  54.             subject: '杆塔拉线',
  55.             content: '拉线',
  56.             status: '',
  57.             result: '',
  58.             charge: '',
  59.             participants:''
  60.         },{
  61.             num: 2,
  62.             subject: '杆塔拉线',
  63.             content: '倾斜',
  64.             status: '',
  65.             result: '',
  66.             charge: '',
  67.             participants:''
  68.         },{
  69.             num: 2,
  70.             subject: '杆塔拉线',
  71.             content: '其它',
  72.             status: '',
  73.             result: '',
  74.             charge: '',
  75.             participants:''
  76.         }
  77.     ]
  78. }
复制代码

Step3: 绑定数据;
  1. let source = new GC.Spread.Sheets.Bindings.CellBindingSource(data)

  2. let sheet = spread.getActiveSheet()
  3. sheet.setDataSource(source)
复制代码

Step4: 设置区域自动合并。
  1. let table = sheet.tables.findByName('details')
  2. let tableRange = table.dataRange()
  3. let range = new GC.Spread.Sheets.Range(tableRange.row,tableRange.col,tableRange.rowCount,2)
  4. sheet.autoMerge(range,GC.Spread.Sheets.AutoMerge.AutoMergeDirection.rowColumn)
复制代码


用户填写数据后,使用sheet.getDataSource().getSource()来获取填写完成的数据,可以自己尝试一下。

demo地址: https://jscodemine.grapecity.com/share/xoun5sBb9UuOoCLP-urF0g/

0 个回复

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