百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

纯前端表格控件SpreadJS:六个常见的基础问题

suiw9 2024-11-24 21:43 30 浏览 0 评论

SpreadJS 是一款基于 HTML5 的纯前端表格控件,兼容 450 种以上的 Excel 公式,具备“高性能、跨平台、与 Excel 高度兼容”的产品特性,可为企业信息化建设提供表格文档协同编辑、 数据填报和类Excel报表设计的功能支持。

SpreadJS 的组件功能十分丰富,为了更好的上手使用,本文汇集了SpreadJS 的常见技术问题和相关示例代码,不管你是提埋点需求的业务方还是负责代码埋点的开发人员,通过阅读本文,都可尝试搭建出您的第一个在线表格系统。

一、如何获取SpreadJS实例

获取SpreadJS的实例有两种方式:

1、借助在线表格编辑器:作为SpreadJS的主要功能之一,在线表格编辑器可直接在 Angular、 React、 Vue 等前端框架中调用,内置开放的 API 和类 Excel 的 UI 设计元素(如工具面板),可实现高效的模板设计、在线编辑和数据绑定,为最终用户带来高度类似 Excel 的使用体验。

当使用在线表格编辑器时,获取SpreadJS实例的API为:

// gc-designer-container为在线表格编辑器容器的ID

let spread = GC.Spread.Sheets.Designer.findControl('gc-designer-container').getWorkbook()

2、直接借助SpreadJS的容器,获取SpreadJS实例的API为:

// ss为SpreadJS容器的ID

let spread = GC.Spread.Sheets.findControl(document.getElementById('ss'))

二、如何操作表单

表单(WorkSheet)是用于呈现数据和处理数据的载体。SpreadJS提供了相对灵活的表单操作接口,即可以添加一个或多个表单,又可以直接绑定数据源。

  1. //获取当前活动表单
  2. let sheet = spread.getActiveSheet()
  3. //获取第一个表单
  4. let firstSheet = spread.getSheet(0)
  5. //获取第一个表单名
  6. let firstSheetName = firstSheet.name()
  7. //修改第一个表单名称
  8. firstSheet.name('新的名字')
  9. //根据表单名称获取表单对象
  10. let secondSheet = spread.getSheetFromName('Sheet2')
  11. //获取当前工作簿表单个数
  12. spread.getSheetCount()
  13. //给当前工作簿最后追加一张表单,名称为“lastSheet”
  14. spread.addSheet(spread.getSheetCount(),new GC.Spread.Sheets.Worksheet('lastSheet'))
  15. //删除工作簿第一个工作表
  16. spread.removeSheet(0)
  17. //根据工作表名称获取索引
  18. let index = spread.getSheetIndex('Sheet5')
  19. //删除名称为‘Sheet5’的工作表
  20. spread.removeSheet(index)

三、如何添加数据

给表单添加数据时,SpreadJS提供了两种方式,分别是数据绑定方式和非绑定方式。使用非绑定方式时,设置数据的API有:

  1. //设置视图区域第四行第一列数据为‘memo’
  2. sheet.setValue(3,0,'memo')
  3. //设置从第六行第一列开始添加两行数据,注意这里的参数为二维数组
  4. sheet.setArray(5,0,[['sunny','女',30,'1990-07-21'],['jane','男',32,'1988-09-09']])

针对数据绑定方式,SpreadJS提供三种形式的数据绑定方式,分别是表单级别绑定、单元格级别绑定和表格级别绑定,不论哪种数据绑定的方式,其设置数据调用的API均为:

  1. //设置数据,customer为数据源
  2. sheet.setDataSource(customers)

举例,以表单级别的数据绑定为例,其设置方式如下:

  1. //此处展示表单级别的数据绑定
  2. //定义数据源,这里需要注意,很多用户会问后台查询出的数据需要以什么格式返回,这里就是表单级别数据绑定时最终被接受的数据形式
  3. let customers = [
  4. { ID:0, Name:'A', Info1:'Info0' },
  5. { ID:1, Name:'B', Info1:'Info1' },
  6. { ID:2, Name:'C', Info1:'Info2' },
  7. ]
  8. let sheet = spread.getActiveSheet()
  9. //自动生成绑定列
  10. sheet.autoGenerateColumns = true
  11. //设置数据
  12. sheet.setDataSource(customers)
  13. //表单级别的数据绑定其实还可以自己设置绑定列,这里只演示其中最简单的一种自动绑定列。
  14. //https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/data-binding/sheet-level-binding/purejs

四、如何获取数据

在 SpreadJS中,添加数据有两种方式,相对应的获取数据也有两种方式,分别是绑定模式下的数据获取和非绑定模式下的数据获取。

非数据绑定模式下数据获取示例如下:

  1. //获取第二行第二列的数据
  2. sheet.getValue(1,1)
  3. //获取整个工作表的数据
  4. //getArray也可以获取某一区域的数据,返回一个二维数组
  5. sheet.getArray(0,0,sheet.getRowCount(),sheet.getColumnCount())
  6. //单元格设置格式后获取格式化之后的显示信息
  7. sheet.getText()
  8. //公式单元格获取公式
  9. sheet.getFormula()
  10. //获取单元格格式化信息
  11. sheet.getFormatter()

数据绑定模式下的数据获取示例如下:

  1. //获取数据
  2. sheet.getDataSource()

五、如何设计模板

用户可以使用SpreadJS在线表格编辑器或者API来实现填报模板的设计工作。由于业务人员比开发人员更了解报表结构,为了提高工作效率,在实际项目中,报表设计流程会由开发人员完成,而模板设计则会交由业务人员。

六、后端如何保存、发送数据

GrapeCity Documents for Excel (简称:GcExcel)是一款基于 Java 平台的服务端高性能表格组件,这款组件可以与SpreadJS 无缝端兼容,再不需要依赖 Office、POI 或第三方应用软件的情况下,实现批量创建、加载、编辑、打印、导入/导出 Excel 文档。

很多用户如果同时在了解SpreadJS和GcExcel时,往往会认为GcExcel会提供将前端表格数据存储到数据库的功能。这里需要解释一下,所有涉及后端对Excel文件进行的操作,或者在后端对一个文件进行设置值、样式等其他信息等操作的行为,均为GcExcel的组件功能。SpreadJS和GcExcel都不会提供任何关于保存数据至数据库中的服务,具体的保存逻辑需要用户自行定义,前后端数据交互格式由开发人员进行约定。

举例:下图分享了一位用户设计模板并将模板传递到后端,最后保存到数据库中的项目流程图,前端可以调用SpreadJS提供的toJSON()方法导出ssjson传递给后端,后端生成数据表存入数据库以及存储ssjson模板文件都需要研发人自行定义存储逻辑。

目前大部分用户采取的是模板与数据分开保存的模式,即模板可以使用文件,也可以使用ssjson字符串,具体使用哪种方式由开发人员决定。模数分离的好处是在模板加载的同时可以请求数据,且数据最终格式符合SpreadJS的要求。

如果文件中数据量不大,前端也可以将整个工作簿toJSON()以一个大的JSON字符串的形式发送给后端,后端拿到json字符串之后可以利用GcExcel重新构建文件,构建完成之后依旧可以利用GcExcel的API在后端获取填写的数据。

上图是用数据绑定的方式来加载数据,返回给前端的是一个json数据结构,前端拿到数据后直接调用worksheet的setDatasource()即可。如果采用非绑定方式,SpreadJS会接收一个二维数组,并在拿到数据后调用worksheet的setArray()方法加载数据。

以上就是纯前端表格控件SpreadJS六个常见的基础问题及解答,为了能够更轻松的上手SpreadJS,欢迎访问葡萄城产品帮助中心,配合评估指南、新手入门视频、学习指南和常用资源模块,实现组件在项目中的快速应用。

相关推荐

nginx的反向代理(Nginx的反向代理和负载均衡)

nginxProxy代理1、代理原理反向代理服务的实现:需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到后端正真提供服务的服务器上。服务器返回自己的服务到负载均衡设备。负...

Nginx UI: 更好用更现代化的Nginx 管理面板

各位铲屎官大家好,我是喵~...

性能测试之tomcat+nginx负载均衡(nginxtcp负载均衡)

nginxtomcat配置准备工作:两个tomcat执行命令cp-rapache-tomcat-8.5.56apache-tomcat-8.5.56_2修改被复制的tomcat2下con...

nginx upstream节点健康检查(nginx tcp 健康检查)

1、前提条件编译nginx时增加nginx_upstream_check_module模板git地址:https://github.com/yaoweibin/nginx_upstream_check...

Nginx 的高并发处理能力(nginx支持高并发原理)

为了实现Nginx的高并发处理能力,需要从**硬件资源**、**操作系统**、**Nginx配置**等多个方面进行优化。以下是详细的配置和示例:---...

Nginx最全详解(万字图文总结)(nginxs)

大家好,我是mikechen。Nginx是非常重要的负载均衡中间件,被广泛应用于大型网站架构,下面我就全面来详解Nginx@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题...

如何用 Nginx 实现前端灰度发布(nginx 灰度测试规则)

前言在前端开发中,灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新。通过灰度发布,我们可以测试新版本的稳定性和性能,同时收集用户反馈。今天,我们将探讨如何使用Ngi...

nginx配置优化场景-直接套用so happy!

前言(叠甲在先)Nginx是一款高性能的Web服务器,广泛应用于互联网领域。...

Nginx配置前后端服务(nginx前后端分离部署)

nginx安装完成后,可以通过命令查看配置文件nginx-t配置文件nginx.conf,是总的配置,有的人会把配置全部配置到这个文件中,如果服务很多,这个文件变得非常庞大,我见过一个配置很大的,在...

使用Nginx配置TCP负载均衡(nginx如何配置负载均衡)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。...

Nginx服务器深度指南:安装、配置、优化指令超详解

在当今数字化时代,Web服务器是支撑互联网应用的关键基础设施。Nginx作为一款高性能的开源Web服务器,凭借卓越的性能、丰富的功能和出色的稳定性,在Web服务器领域占据了重要地位。无论是大型互联网公...

Nginx的配置详解(附代码)(nginx基本配置)

本篇文章给大家带来的内容是关于Nginx的配置详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。常用配置项在工作中,我们与Nginx打交道更多的是通过其配置文件来进行。...

Nginx配置文件详解(nginx配置文件详解带实例)

Nginx配置文件详解Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。...

从 0 到 1:构建高可用 Linux 负载均衡集群(基于 Nginx + Keepalived)

在高并发业务场景下,单台服务器往往无法支撑大量请求,因此需要使用**负载均衡(LoadBalancing)**技术来提升系统的稳定性和可用性。Nginx+Keepalived是常见的开源负载均...

配置Nginx TCP转发(nginx 接口转发)

Nginx一般用在HTTP的转发,TCP的转发大都会使用HAProxy。工作中遇到一个需求,用到了Nginx服务作为TCP转发。场景是这样,数据采集设备通过公网将数据推送到后端应用服务,服务部署在业主...

取消回复欢迎 发表评论: