找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2022-3-8 16:33  /   查看:2161  /  回复:0
目前SpreadJS在数据绑定中,暂时不支持公式绑定。以下表为例:
image.png632254638.png
这种表,其实是一个典型的表格绑定,但比较麻烦的是,总工时这一列等于工时分解下区域的总和。总工时这里不是一个单纯的值,而是一个公式。本文针对这种情况提供一种解决方案。
1. 设计模板结构;
表中2,3,4行其实是一个多行表头,这里建议直接用设计就可以了,不要用表格。
从第五行开始,其实是一个表格绑定,但是这里将表头隐藏起来了。表格绑定中总工时这一列绑定字段要设置为空,然后写上sum函数。
具体的空模板参考demo中的bindfile.js。

2. 绑定数据;
  1. let sheet = spread.getActiveSheet()
  2. let source = new GC.Spread.Sheets.Bindings.CellBindingSource(datas)
  3. sheet.setDataSource(source)
  4. let table = sheet.tables.findByName('details')
  5. copyTableFormula(sheet,table)
复制代码


3. 完成复制表格区域公式的函数;
  1. function copyTableFormula(sheet, table) {
  2.         var range = table.dataRange()
  3.         for (var i = 0; i < range.rowCount - 1; i++) {
  4.                 //总工时这一列可以打个tag做一下标记
  5.                  sheet.copyTo(range.row + i, 5, range.row + i + 1,5, 1, 1, GC.Spread.Sheets.CopyToOptions.formula)
  6.         }
  7.     }
复制代码


4. 监听表格行变化事件,行变化时复制公式。
  1. sheet.bind(GC.Spread.Sheets.Events.TableRowsChanged,function(e,data){
  2.     copyTableFormula(data.sheet,data.table)
  3. })
复制代码


完成的demo代码参考:https://jscodemine.grapecity.com/share/931YrOrDV0eXkXP6RnbnnA/

0 个回复

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