• 不用任何 js 库,纯前端导出数据到 Excel / CSV 文件就这么简单几行代码


    不用任何 js 库,纯前端导出数据到 Excel / CSV 文件就这么简单几行代码

    最近实现的导出数据为表格的需求,不需要工具库,也不要后端实现,mark 一下。

    js 导出 excel 表格

    最近工作中又遇到了将表格数据导出为 excel 表格的需求,我第一时间想到的是之前我的网站上推荐过的 javascriptnode-xlsx,这是一个在 node.js 服务端使用的库,之前用于电商系统导出订单数据给运营同事,使用比较简单,但仍需要后端实现。

    需求简单分析

    这次的需求有下面几个特点:

    • 数据类型几乎都是文本,没有太多数字型的列
    • 没有太多需要统计或者汇总等计算结果的输出的行
    • 需要导出的数据已经在前端全部加载并展示

    解决方案确定

    带着不想麻烦后端的想法,我尝试寻找纯前端实现数据导出 excel 表格的方法。找了一圈,发现效果不理想,要么太复杂,要么导出的 xlsx 文件兼容性有问题。突然一激灵,想到之前用过的数据统计应用导出的文件格式是 csv 的,稍微研究了一下,最后我把决定把导出的文件格式转为了 csv 表格。

    csv 是什么格式的文件?

    csv 是一种主要以逗号为分隔符的分隔值文件格式,以纯文本的形式储存表格数据,常常用来作为不同应用程序间转移数据使用。

    • 用逗号作为表格列分隔符,当然也可以用其他分隔符,不过为了通用性,推荐用逗号
    • 纯文本格式,读取、写入都很简单
    • 每一行文本就是表格的一行数据
    • 几乎能被所有的表格应用支持,excel 和 wps 更是老早就支持导入 csv 文件

    看到这里,相信很多开发者已经知道,只要把数据处理成符合上面格式的字符串,然后把 csv 的文件头加上,通过 标签下载,就完成了导出文件下载到本地的需求。

    代码实现

    假设有如下表格数据:

    const tableRows = [
      ['姓名','手机号','部门'], // 第一行就是表格表头
      ['尤与西','131xxxx','技术部'],
      ['阮易枫','158xxxx','技术部'],
      ['廖学丰','189xxxx','技术部']
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    构造 CSV 字符:

    // 构造数据字符,换行需要用\r\n
    let CsvString = tableRows.map(data => data.join(',')).join('\r\n');
    // 加上 CSV 文件头标识
    CsvString = 'data:application/vnd.ms-excel;charset=utf-8,\uFEFF' + encodeURIComponent(CsvString);
    // 通过创建a标签下载
    const link = document.createElement('a');
    link.href = CsvString;
    // 对下载的文件命名
    link.download = `技术部顶级员工列表.csv`;
    // 模拟点击下载
    link.click();
    // 移除a标签
    link.remove();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这样就会直接从浏览器下载,完美完成需求。

    注意事项

    csv 文件默认是每一行为一条数据,如果导出表格的单元格里需要换行,则需要用双引号包裹起来,比如构造出的 CSV 字符串:

    尤与西,136xxxx,技术部,"第二小组
    技术主管",001
    阮易枫',158xxxx,技术部,"第三小组
    技术主管",002
    
    • 1
    • 2
    • 3
    • 4

    上面数据导出表格共2条数据,每行第4列的“小组”和“技术主管”之间的换行会保留。

    另外,这种方式不支持合并单元格、设置数据类型的格式,如果输出的表格对格式要求较高,还是老老实实用 node-xlsx 吧。

    最后祝大家早点完成需求,早点下班。

    原文链接:https://www.thosefree.com/js-export-to-csv

  • 相关阅读:
    从零开始实现放置游戏(十七)——完结篇(附DEMO地址)
    使用docker搭建kafka集群、可视化操作台
    如何使用solidity将数据链上存储
    Java String类
    基于java语言+springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码
    怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
    在线购物系统(JSP+java+springmvc+mysql+MyBatis)
    Docker基础
    Java数据结构与算法(一)
    【经典算法学习-排序篇】冒泡排序
  • 原文地址:https://blog.csdn.net/weixin_45583710/article/details/127137410