在前端轻量化的导出表格数据

简介: 在前端轻量化的导出表格数据

序言



对于后台管理系统而言(这里指前端部分),可视化的表格展现数据是必不可少的部分,而将这些表格数据导出为 Excel 或 Number 等软件可打开的文件的这种需求也很常见,一般这个功能都是在服务器端如 node 实现,但是现在我们换一个角度。


前端能够将数据展现出来,这意味着前端已经拿到了这些数据,而至于后续想怎么操作完全看自己心情,那么能否脱离后台实现上述需求呢?答案是肯定的,下面简单的介绍一种轻量化的导出方法。



CSV、Blob、a.download



CSV 名为逗号分隔值(也叫字符分隔值),是一种纯文本。每列数据以逗号 ',' 分隔,每行数据以 ' \r\n ' 分隔。


为了在前端实现对文件的操作,我们需要用到 Web API 中的 Blob 对象, 一个 Blob 对象表示一个不可变的、原始数据的类似文件对象,利用此 Blob 对象即可将 CSV 原始数据封装。


另外为了在前端触发文件的下载,还需要用到 a 标签的 download 属性,当然还有 href 属性对文件对象的引用。



实战



啰嗦了一大堆,来点代码才是最实际的,这里的重点其实就是将手里的数据(大部分是 json 形式的数组格式)转换为 CSV 的形式。



如上图所示,我准备了一个 json 格式的数组作为原始数据,首先我们定义每一列的表头,然后根据表头的顺序遍历 json 数组以逗号分隔依次拼接每一列的内容,每一个 json 对象构成了表格中的一行,因此遍历完随即加上 ' \r\n ' 分隔为行。

将文件下载的操作进行封装,设置 download 标识,依次判断是否触发了下载的操作,上图中我都进行了注释。



注意



使用 CSV 一个很重要的点是,对于数字,Excel 会自动展示为科学计数法的形式,对于上述例子中的 ' 1-1 ' 的形式,Excel 会自动展示为 ' 1月1日 ',为了避免这种情况,请使用制表符加逗号 ' \t,' 作为分隔符。



进阶



也许你应该注意到了上述例子中的表头生成的很突兀,而且对应表头生成数据的形式也很死板,下面我们就对此进行改进。


在数据库中存储的数据 key 值肯定是英文而不是中文,但是作为表头展示时当然又得用中文,对此,我们提供一个配置项 config 来说明表头的中英文对应关系。



上图中,我们进一步的封装,对函数提供两个参数,第一个参数 data 传递 json 数组形式的原始数据,第二个 config 参数以对象的形式传递可配置的表头中英文对应关系。

而在生成具体的表头和表格内容时根据 config 配置项,一一对应拼接。



结语



这次站在前端的角度写了这篇文章,仅仅为了提供了另一种在前端就生成表格数据的方法,当然 CSV 是很轻量的,其无碍于你使用哪种前端框架(react、vue、angular 都可以),而缺点就是其并不能直接进行合并单元格这类更复杂的操作,但是仅仅为了展示数据的话也是不错的选择,毕竟减少了对后台的依赖以及前后文件传输的过程,最后怎么选择当然全看你自己了。

目录
相关文章
|
11月前
|
存储 监控 安全
前端框架的数据驱动方式如何保证数据的安全性?
总之,前端框架的数据驱动方式需要综合运用多种手段来保证数据的安全性。从传输、存储、访问控制到防范攻击等各个方面进行全面考虑和实施,以确保用户数据的安全可靠。同时,不断加强安全管理和技术创新,以应对不断变化的安全挑战。
373 60
|
7月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
519 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
12月前
|
监控 JavaScript 前端开发
前端的混合之路Meteor篇(六):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
本文介绍了 Meteor 3.0 中的发布-订阅模型,详细讲解了如何在服务器端通过 `Meteor.publish` 发布数据,包括简单发布和自定义发布。客户端则通过 `Meteor.subscribe` 订阅数据,并使用 MiniMongo 实现实时数据同步。此外,还展示了如何在 Vue 3 中将 MiniMongo 的 `cursor` 转化为响应式数组,实现数据的自动更新。
176 2
|
12月前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
638 2
|
12月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
914 14
|
12月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
254 0
|
12月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
379 6
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架