找回密码
 立即注册

QQ登录

只需一步,快速开始

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

123

主题

8927

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13536

讲师达人悬赏达人元老葡萄SpreadJS 认证SpreadJS 高级认证微信认证勋章

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-2 10:29  /   查看:3376  /  回复:1
SpreadJS和GCExcel都支持数据绑定。通常我们可以使用SpreadJS的双向数据绑定实现前端填报和报表展示,参考https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/data-binding/table-binding/purejs

也可以使用GCExcel的模板引擎轻松的批量产出Excel或PDF报表,参考https://demo.grapecity.com.cn/documents-api-excel-java/demos/templates

那么如果结合两个产品实现前端SpreadJS设计模板,服务端批量导出报表呢?
可以通过如下两种方式
1. GCExcel支持SpreadJS的数据绑定,可以直接给定数据源,实现和SpreadJS一样的绑定
在通过fromJSON导入模板后,直接绑定数据即可
  1. // 导入SpreadJS模板
复制代码
2. 通过BindingPath将SpreadJS版本转为GCExcel模板,这种方式更加灵活,通过GCExcel灵活的模板系统可以实现更多效果
或者在设计模板时候通过Tag标记一些信息指定模板的信息
BindingPath转GC模板参考代码

  1.             for (int i = 0; i < usedRange.getRowCount(); i++) {
  2.                 for (int j = 0; j < usedRange.getColumnCount(); j++) {
  3.                     String bindingPath = sheet.getRange(i, j).getBindingPath();
  4.                     if (bindingPath != null && !bindingPath.equals("")) {
  5.                         sheet.getRange(i, j).setValue("{{ds." + bindingPath + "}}");
  6.                     }
  7.                 }
  8.             }
  9.             ITables tables = sheet.getTables();
  10.             if (tables != null && tables.getCount() > 0) {
  11.                 for (int i = 0; i < tables.getCount(); i++) {
  12.                     ITable table = tables.get(i);
  13.                     String bindingPath = table.getBindingPath();
  14.                     if (bindingPath != null && !bindingPath.equals("")) {
  15.                         IRange range = table.getDataRange();
  16.                         for (int j = 0; j < range.getColumnCount(); j++) {
  17.                             String dataFeild = table.getColumns().get(j).getDataField();
  18.                             IRange cell = sheet.getRange(range.getRow(), range.getColumn() + j);
  19.                             if (dataFeild != null && !dataFeild.equals("")) {
  20.                                 if (j == 0) {
  21.                                     String firstRowRange = (range.getRow() + 1) + ":" + (range.getRow() + 1);
  22.                                     cell.setValue("{{ds." + bindingPath + "." + dataFeild + "(R=" + firstRowRange + ",G=list,S=none)}}");
  23.                                 } else {
  24.                                     cell.setValue("{{ds." + bindingPath + "." + dataFeild + "}}");
  25.                                 }
  26.                             } else {
  27.                                 String formula = cell.getFormula();
  28.                                 if (formula != null && !formula.equals("")) {
  29.                                     cell.setValue("{{=" + formula + "}}");
  30.                                 }
  31.                             }
  32.                         }
  33.                     }
  34.                 }
  35.             }
复制代码
转换完成之后进行绑定


前后端结合使用能突破前端的性能瓶颈,同时解决前端PDF需要注册字体的问题

0 个回复

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