Winny 发表于 2022-3-8 16:33:50

表格绑定数据扩展时复制公式

目前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/
页: [1]
查看完整版本: 表格绑定数据扩展时复制公式