如何通过前后端交互的方式制作Excel报表

excel · 浏览次数 : 0

小编点评

**前言** Excel表格是办公领域最广泛的工具,它拥有强大的数据处理和可视化功能,可以轻松地呈现数据,进行数据分析、图表制作和数据透视等操作。本文将介绍如何通过葡萄城公司的纯前端表格控件SpreadJS和后端表格组件GcExcel实现一张Excel报表模板并进行数据的录入与填报。 **步骤一:数据准备** 1. 打开SpreadJS在线表格编辑器,点击表格工具栏上【数据】Tab中的【数据源】按钮,为其添加好数据源。 2. 通过【添加表】按钮添加每一个数据源对象(每一个数据源对象对应一张表)。 3. 设置分组报表:通过拖拽左侧数据源列表中的字段,可以快速构建一个按照销售区域、省市、商品类型字段进行层层分组,统计销售额和利润的报表模板。 **步骤二:创建Excel报表模板** 1. 点击【插入】Tab的报表按钮,插入一张新的报表模板。 2. 在左侧的数据源列表中选择数据源对象,并配置读取数据的路径(可以是一个请求对应格式数据源的地址,也可以是一个服务端请求的地址,由服务端返回一个符合格式的数据源对象)。 **步骤三:保存Excel模板为sjs文件** 1. 把.sjs文件放到SpreadJS前端代码的根目录下。 2. 将Excel模板转化为GcExcel模板语法以Excel报表模板(如下图所示)中的C4单元格(省份)为例,小编先通过getBindingPath方法拿到模板api的信息(下图中的DevTools中的队列信息)获取到api的信息之后,再解析出它的绑定路径: ```javascript //此为部分代码,完整代码在文末的Gitee链接中let binding = template.getBindingPath(r, c) // binding内容如上图// ... // 绑定路径let path = \"\"\switch (binding && binding.type) { case \"Group\": case \"List\": if (binding.binding) { let p = binding.binding.match(/(?<=\\[)[^\\]\\[]*(?=\\])/g).join(\".\") path += ds + \".\" + p // path=\"销售数据.省份\" } break; // ...}然后再解析出其合并类型和扩展方向:// Group类型let group = \"\"if (binding && binding.type == \"Group\") { group = \"G=M\"} else if (binding && binding.type == \"List\") { group = \"G=L\"} ``` 最后将这些信息整合在一起,加上双花括号后,那么导出的Excel文件中的C4单元格的内容应该是如下的GcExcel模板语法: ```{{ds.销售数据.省份(E=V,G=M)}} ``` **步骤四:运行前端项目,导出Excel模板文件** 1. 运行前端项目,导出Excel模板文件输入指令【npm install】下载依赖输入指令【npm run start】启动项目(启动后如下图所示) 2. 最后将修改后的模板导出为Excel文件,如下图所示,可以看到,省份单元中的信息已经修改为GcExcel模板语法。 **最终结果** 通过以上步骤,您已经成功创建一张Excel报表模板,并进行数据的录入与填报。

正文

前言

Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具。它不仅可以呈现数据清晰明了,还能进行数据分析、图表制作和数据透视等操作,为用户提供了全面的数据展示和分析能力。

今天小编就为大家介绍一下,如何通过葡萄城公司的纯前端表格控件SpreadJS和后端表格组件GcExcel实现一张Excel报表模板并进行数据的录入与填报。

环境准备

Node.js

SpreadJS在线表格编辑器

代码文件(可作为阅读本文的参考)

前端

设计Excel报表模板

1. 加载制作报表的数据源:

打开SpreadJS在线表格编辑器,在设计分组报表之前,需要数据准备的相关工作,点击表格工具栏上【数据】Tab中的【数据源】按钮,为其添加好数据源。

通过【添加表】按钮添加每一个数据源对象(每一个数据源对象对应一张表),并配置读取数据的路径(路径可以是一个请求对应格式数据源的地址,也可以是一个服务端请求的地址,由服务端返回一个符合格式的数据源对象)。

数据路径为可选字段,如果json中包含多个数据源,可以通过设置数据路径进行区分。

2. 添加报表模板:

添加完数据源之后,点击【插入】Tab的报表按钮,插入一张新的报表模板,之前添加的数据源对象会在左侧的数据源列表中显示,如下图所示。

3. 设置分组报表:

通过拖拽左侧数据源列表中的字段,可以快速构建一个按照销售区域、省市、商品类型字段进行层层分组,统计销售额和利润的报表模板,如下图所示:

4. 保存Excel模板为sjs文件

修改Excel报表模板

将Excel报表模板保存为.sjs文件后,小编现在需要将Excel报表模板中的部分单元格转换为GcExcel模板语言,具体操作如下:

把.sjs文件放到SpreadJS前端代码的根目录下

5. 将Excel模板转化为GcExcel模板语法

以Excel报表模板(如下图所示)中的C4单元格(省份)为例,小编先通过getBindingPath方法拿到模板api的信息(下图中的DevTools中的队列信息)

获取到api的信息之后,再解析出它的绑定路径:

//此为部分代码,完整代码在文末的Gitee链接中
let binding = template.getBindingPath(r, c)  // binding内容如上图
// ... 
// 绑定路径
let path = ""
switch (binding && binding.type) {
    case "Group":
    case "List":
        if (binding.binding) {
            let p = binding.binding.match(/(?<=\[)[^\]\[]*(?=\])/g).join(".")
            path += ds + "." + p // path="销售数据.省份"
        }
        break;
    // ...
}

然后再解析出其合并类型和扩展方向:

// Group类型
let group = ""
if (binding && binding.type == "Group") {
    group = "G=M"
} else if (binding && binding.type == "List") {
    group = "G=L"
}
// Expand方向
let expand = ""
if (binding && binding.type != "Summary" && binding.spillDirection == "Vertical") {
   expand = "E=V"
} else if (binding && binding.type != "Summary" && binding.spillDirection == "Horizontal") {
   expand = "E=H"
}

最后将这些信息整合在一起,加上双花括号后,那么导出的Excel文件中的C4单元格的内容应该是如下的GcExcel模板语法:

{{ds.销售数据.省份(E=V,G=M)}}

6. 运行前端项目,导出Excel模板文件

  • 输入指令【npm install】下载依赖
  • 输入指令【npm run start】启动项目(启动后如下图所示)

最后将修改后的模板导出为Excel文件,如下图所示,可以看到,省份单元中的信息已经修改为GcExcel模板语法。

后端

打开GcExcel后端代码,将前面导出的Excel模板文件放到代码文件的根目录下,最后运行的main函数即可将数据传入Excel模板文件,最后会生成一个带数据的Excel报表。

结语

以上就是如何使用SpreadJS+GcExcel制作一张Excel报表的全过程,如果您想了解更多信息,欢迎点击这里查看。

扩展链接:

【干货放送】财务报表勾稽分析要点,一文读尽!

为什么你的财务报表不出色?推荐你了解这四个设计要点和!

纯前端类 Excel 表格控件在报表勾稽分析领域的应用场景解析

与如何通过前后端交互的方式制作Excel报表相似的内容:

如何通过前后端交互的方式制作Excel报表

前言 Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具。它不仅可以呈现数据清晰明了,还能进行数据分析、图表制作和数据透视等操作,为用户提供了全面的数据展示和分析能力。 今天小编就为大家介绍一下,如何通过葡萄城公司的纯前端表格控件SpreadJS和后端表格组

前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前端与数据展示 前后端分离是当前比较盛行的开发模式,它使项目的分工更加明确,后端负责处理、存储数据;前端负责显示数据.前端和后端开发人员通过接口进行数据的交换。因此前端

Flask框架:如何运用Ajax轮询动态绘图

摘要:Ajax是异步JavaScript和XML可用于前后端交互。 本文分享自华为云社区《Flask框架:运用Ajax轮询动态绘图》,作者:LyShark。 Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask 框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通

如何从抓包文件中分析慢请求

请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。 ## 抓包文件分析 准备用我在测试环境抓到的包去进行分析,首先执行抓包命令。 ```

循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(2)

在前面随笔《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)》中介绍了Mvvm 的开发,以及一些界面效果,本篇随笔继续深入探讨基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发,介绍如何整合SqlSugar框架的基础接口,通过基类继承的方式,简化实际项目的开发代码处理。

前端精准测试实践

作者:京东云质量部 背景 随着前端技术发展,已经转变为数据绑定为主流的框架方式,与后端服务一样,前端代码实现也会涉及相互依赖,引用这些场景,那么应该如何准确的评估前端代码改动的影响范围?依赖开发评估?依靠经验评估?或者直接前端自动化全回归?手工测试全回归?显然以上的策略都不是最优策略,本文叙述了通过

angular + express 实现websocket通信

最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端; 第一个思路是单独写一个后端服务用来实现websocket,调试成功了,后来又发现一个插件express-ws,于是决定改变思路,研究了下,最终代码如下,希

微前端框架single-spa子应用加载解析

本文主要通过对微前端框架single-spa的基座应用加载子应用的single-spa-vue函数库进行分析,通过代码维度分析让大家了解在single-spa加载子应用的时候都做了哪些事情。如何通过优化single-spa-vue函数库保持子应用的状态。

实用教程丨如何将实时数据显示在前端电子表格中(二)

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在如何将实时数据显示在前端电子表格中(一)一文中,我们讲述了如何通过WebSocket从Finnhub.IO获取实时数据,那么本文重点讲述如何使用基本的 Spre

Vue 3深度探索:自定义渲染器与服务端渲染

这篇文章介绍了如何在Vue框架中实现自定义渲染器以增强组件功能,探讨了虚拟DOM的工作原理,以及如何通过SSR和服务端预取数据优化首屏加载速度。同时,讲解了同构应用的开发方式与状态管理技巧,助力构建高性能前端应用。