目前SpreadJS在数据绑定中,暂时不支持公式绑定。以下表为例:
这种表,其实是一个典型的表格绑定,但比较麻烦的是,总工时这一列等于工时分解下区域的总和。总工时这里不是一个单纯的值,而是一个公式。本文针对这种情况提供一种解决方案。
1. 设计模板结构;
表中2,3,4行其实是一个多行表头,这里建议直接用设计就可以了,不要用表格。
从第五行开始,其实是一个表格绑定,但是这里将表头隐藏起来了。表格绑定中总工时这一列绑定字段要设置为空,然后写上sum函数。
具体的空模板参考demo中的bindfile.js。
2. 绑定数据;
- let sheet = spread.getActiveSheet()
- let source = new GC.Spread.Sheets.Bindings.CellBindingSource(datas)
- sheet.setDataSource(source)
- let table = sheet.tables.findByName('details')
- copyTableFormula(sheet,table)
复制代码
3. 完成复制表格区域公式的函数;
- function copyTableFormula(sheet, table) {
- var range = table.dataRange()
- for (var i = 0; i < range.rowCount - 1; i++) {
- //总工时这一列可以打个tag做一下标记
- sheet.copyTo(range.row + i, 5, range.row + i + 1,5, 1, 1, GC.Spread.Sheets.CopyToOptions.formula)
- }
- }
复制代码
4. 监听表格行变化事件,行变化时复制公式。
- sheet.bind(GC.Spread.Sheets.Events.TableRowsChanged,function(e,data){
- copyTableFormula(data.sheet,data.table)
- })
复制代码
完成的demo代码参考:https://jscodemine.grapecity.com/share/931YrOrDV0eXkXP6RnbnnA/
|
|