如何在填报场景中使用数据绑定获取数据源

如何,填报,场景,使用,数据,绑定,获取,数据源 · 浏览次数 : 611

小编点评

**使用纯前端表格控件解决数据收集问题** **1. 使用 SpreadJS 创建数据绑定** - 创建一个 SpreadJS 对象。 - 使用 `sheets.createSheet()` 创建一个新的工作表。 - 使用 `cells.range.bind` 创建数据绑定。 **2. 数据绑定模板设计** - 创建一个 `CellDataBinder` 对象。 - 设置模板的标题、数据源和绑定属性。 - 设置数据绑定格式。 **3. 数据绑定获取** - 使用 `getBindingContext` 获取数据绑定上下文。 - 使用 `getData` 获取数据绑定的值。 **4. 数据汇总** - 使用 `getBindingContext` 获取数据绑定上下文。 - 使用 `getData` 获取数据绑定的值。 - 使用 `setValues` 设置数据绑定的值。 **5. 示例代码** ```javascript // 创建 SpreadJS 对象 const spread = new Spread.Grid({ container: '#spreadsheet' }); // 创建数据绑定 const binder = spread.cells.range.bind(sheetName, rangeName); // 设置模板 binder.setData({ title: '员工信息表', data: [ { name: '姓名', type: 'string' }, { name: '年龄', type: 'number' }, { name: '体重', type: 'number' } ] }); // 获取数据绑定的值 const data = spread.getBindingContext('data').getData(); // 数据汇总 const summaryData = spread.getBindingContext('summary').getData(); ``` **其他资源** - 指标补录Demo:使用SpreadJS中的数据绑定设计了数据收集模板与汇总模板 - 基于React18的电子表格程序:基于SpreadJS中的数据绑定设计了数据收集模板与汇总模板 - 基于Vite+React构建在线Excel:基于SpreadJS中的数据绑定设计了在线Excel - SpreadJS内部支持了三种数据绑定方式,分别数工作表绑定、单元格绑定与表格绑定

正文

背景

在公司的日常业务中,存在不少数据的收集提取需求,大部分公司会采取Excel来完成数据的收集和汇总,但这项工作会让负责信息收集的业务人员相当头大。虽然提前做好了数据收集模板,但最终提交上来的模板会被修改的五花八门,信息填写错误率比较高,无法实现信息填写不完整不允许提交的约束。后期的数据汇总虽然可以采用手动的复制黏贴来实现,但如果想要把这些数据做结构化存储,又需要去研发人员去开发一套解析Excel文档的功能,将这些填报数据提取入库,整个流程比较繁琐且出错率较高。

如果从最开始将这套数据收集的业务完全做在Web端,整体的数据收集任务下发,填报,数据汇总,数据提取完全自动化,这将会大大的提高业务人员的工作效率。本文会带大家使用纯前端表格控件解决这个问题。该控件SpreadJS具备纯前端、高性能等特点,在浏览器端实现了excel的大部分功能,使得在线编辑Excel称为可能。使用它,我们不再需要本地安装Office相关的服务,只要具备一个满足H5标准的浏览器,即可在Web端完成之前需要在本地Excel中完成的一系列操作,我们也可以在官方部署的体验地址上对SpreadJS进行在线体验。

数据收集逻辑

结合SpreadJS和前后端交互逻辑,即可完成一个数据收集的功能,大家如果对源码内容感兴趣可以查看: 指标补录Demo

在该实例中,使用SpreadJS中的数据绑定设计了数据收集模板与汇总模板;之后开发了数据收据模板下发的功能,将数据收集模板推送给需要填报的相关人员。

对应人员填报后,可以使用SpreadJS中数据绑定获取数据的相关API,获取填写数据。

最终再借助数据绑定,将汇总数据使用数据绑定设置在汇总模板中。通过如上几步,客户的填报数据在提交时,就可以以结构化数据存储在数据库中,汇总时只需要从数据库中查询再设置到汇总模板即可。SpreadJS同时内置了多种数据验证,在数据提交时,结合数据验证,可以在模板中包含异常数据时将请求驳回,建立一套严谨便捷的数据提交汇总流程。

项目实战

接下来我们可以一起探索SpreadJS中数据绑定的功能究竟该如何使用。

如果不了解如何在Web端项目集成SpreadJS,可以参考文章:

构建基于React18的电子表格程序

基于Vite+React构建在线Excel;

SpreadJS内部支持了三种数据绑定方式,分别数工作表绑定、单元格绑定与表格绑定。

(1)工作表绑定

通常一个Excel文件会包含多张工作表,如下所示,Sheet2与Sheet3分别代表的就是一张工作表:

工作表级别的数据绑定即将数据与当前工作表建立映射关系,相关的代码实现可以参考学习指南-工作表绑定,这里列出一些核心的代码:

let designer = new GC.Spread.Sheets.Designer.Designer("designer-container")

// 获取designer关联的Spread对象

let spread = designer.getWorkbook()

// 获取当前活动的sheet

let sheet = spread.getActiveSheet()

// 模拟绑定数据,表单绑定数据源是一个json数组

function generateData(count){

`    `let data = []

`    `for(let i=0; i<count;i++){

`        `let item = {}

`        `item.id = i

`        `item.name = `姓名${i}`

`        `item.age = Math.ceil(Math.random()\*10+10)

`        `item.weight = Math.round(Math.random()\*30+20)

`        `data.push(item)

`    `}

`    `return data

}

let data = generateData(100)

// 设置当前工作表的数据源

sheet.setDataSource(data)

执行完成绑定逻辑之后,工作表展示如下:

接下来我们可以在工作表中进行一些删除行,新增行,修改数据的操作,操作完成之后,调用获取绑定数据的API,即可获取当前修改之后的绑定数据:

详细的demo演示,可以点击这里参考实现。

(2)单元格绑定

单元格绑定见名思意,即将单元格与某一个字段key建立映射,用户填写的数据可以反应在这个key值对用的value中,单元格绑定代码的实现方式可以参考学习指南-单元格绑定,本文演示如何借助设计器实现数据绑定。首先,借助设计器,完成一个数据绑定模板的设计,可以参考如下动画:

通过简单的拖动,即可完成key值与单元格之间的映射建立,接下来,就可以构造一些默认数据,设置默认的绑定数据。绑定完成之后,可以修改绑定数据,修改完成之后,通过SpreadJS数据绑定获取数据源的API,即可拿到修改之后的数值。这里其实就是一个填报场景的体现,例如,当前需要收集人员信息表,每一位员工在填写完成之后,点击提交时,就可以拿到员工信息的一个json数据,之后前端就可以将这些数据发送给服务端,让服务端去做存储了。

SpreadJS中,支持将当前文件导出成一个他们自己能识别的json,模板文件可以以json形式存储,下次访问文件时,只需要执行spread.fromJSON(fileJson),就可以实现模板文件的保存与加在显示了,关于表单绑定完整的Demo演示可以点击这里,参考详细的实现代码。

(3)表格绑定

很多不熟悉Excel的用户,会直接把一个Excel工作簿或者一个工作表称为一个表格,但其实这样的是不正确的。Excel中表格具有特殊的含义,这一点在SpreadJS中也是一致的。SpreadJS中表格绑定的代码实现可以参考学习指南-表格绑定。在客户的实际业务中,表格绑定和单元格绑定往往会同时发生,接下来会演示借助SpreadJS在线表格编辑器(设计器)如何实现一个这样的模板设计:

到这里我们就为大家完整展示了如何在填报场景中使用数据绑定获取数据源,大家想了解更多demo源码实例:

https://www.grapecity.com.cn/developer/spreadjs/demo/code-base

与如何在填报场景中使用数据绑定获取数据源相似的内容:

如何在填报场景中使用数据绑定获取数据源

背景 在公司的日常业务中,存在不少数据的收集提取需求,大部分公司会采取Excel来完成数据的收集和汇总,但这项工作会让负责信息收集的业务人员相当头大。虽然提前做好了数据收集模板,但最终提交上来的模板会被修改的五花八门,信息填写错误率比较高,无法实现信息填写不完整不允许提交的约束。后期的数据汇总虽然可

5.3 汇编语言:字符串操作指令

本章将深入研究字符串操作指令,这些指令在汇编语言中具有重要作用,用于处理字符串数据。我们将重点介绍几个关键的字符串操作指令,并详细解释它们的功能和用法。通过清晰的操作示例和代码解析,读者将了解如何使用这些指令进行字符串比较、复制、填充等常见操作。我们还将探讨不同指令之间的区别,并提供实际的示例程序,展示字符串操作指令在实际场景中的应用。通过学习本章,读者将能够拓展汇编技能,为处理字符串数据提供高效

【ASP.NET Core】MVC操作方法如何绑定Stream类型的参数

咱们都知道,MVC在输入/输出中都需要模型绑定。因为HTTP请求发送的都是文本,为了使其能变成各种.NET 类型,于是在填充参数值之前需 ModelBinder 的参与,以将文本转换为 .NET 类型。 尽管 ASP.NET Core 已内置基础类型和复杂类型的各种 Binder,但有些数据还是不能

NodeJS 实战系列:DevOps 尚未解决的问题

本文将通过展示 NodeJS 应用里环境变量的提取过程,来一窥 DevOps 技术是如何应用在现在云平台上的运维工作中的。同时我也想让大家在这里看到 DevOps 的另外一面,即它并非全能,从本地开发到持续部署再到实际运行,有一些运维鸿沟依然还未被填平。“人工操作”依然是工作中的最大风险。

Fake权限验证小例子

前言 关于本地测试如何进行Fake权限验证 正文 在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验证吧。 上图可能是我们本地测试的时候需要填写的一个token位置,本地测试不方便。 那么怎么伪造权限

处理来自微信的文本消息

官方文档在这里。 我们的公众号服务器可以接收来自微信服务器的普通消息,包括: 文本消息 图片消息 语音消息 小视频消息 地理位置消息 链接消息 这里以文本消息为例,介绍如何处理微信服务器转发给我们的用户消息。 当普通微信用户向公众账号发消息时,微信服务器将向我们填写写的URL上发送一条包含XML数据

Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析

总结/朱季谦 某天同事突然问我,你知道Mybatis Plus的insert方法,插入数据后自增id是如何自增的吗? 我愣了一下,脑海里只想到,当在POJO类的id设置一个自增策略后,例如@TableId(value = "id",type = IdType.ID_WORKER)的注解策略时,就能实

记 Codes 开源免费研发管理平台 —— 日报与工时融合集中式填报的创新实现

市面上所有的研发管理软件,大多都有工时相关功能,但是却没有日报功能,好像也没什么问题,但是在使用过程中体验非常不好,为什么呢? 项目管理对于基层工作人员来说,主要解决这三个问题:开展我的工作、协作我们的工作和汇报我的工作,也就是说日常的汇报也是刚需。平台没有日报就会有下面的问题。 第一、如果离开平台...

基于.NetCore开发博客项目 StarBlog - (26) 集成Swagger接口文档

## 前言 这是StarBlog系列在2023年的第一篇更新😃~ 在之前的文章里,我们已经完成了部分接口的开发,接下来需要使用 curl、Postman 这类工具对这些接口进行测试,但接口一多,每次测试都要一个个填入地址和对应参数会比较麻烦… 我们需要一种直观的方式来汇总项目里的所有接口,并且如果

vue3 | slots

一、什么是插槽 插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签,父组件填充的内容称为插槽内容。 子组件不提供插槽时,父组件填充失效 父组件无填充