两种使用原生js实现导出excel数据简单讲解

简介: 1.js导出csv简单来说csv就是一种数据以逗号隔开的,文件以纯文本形式存储表格数据。csv优点是实现起来相对简单,但是不支持多sheet和样式具体可以查看CSV百度百科进行了解根据csv格式的说明,所以我们实现导出csv就很简单了,只要原始数据转换成列数据与列数据之间用逗号隔开,行数据进行换行格式的文本数据其后缀为 .

1.js导出csv

简单来说csv就是一种数据以逗号隔开的,文件以纯文本形式存储表格数据。
csv优点是实现起来相对简单,但是不支持多sheet和样式
具体可以查看CSV百度百科进行了解

根据csv格式的说明,所以我们实现导出csv就很简单了,只要原始数据转换成列数据与列数据之间用逗号隔开,行数据进行换行格式的文本数据其后缀为 .csv 就可以了
导出示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>demo</title>
</head>
<body>
    <textarea id="textarea" cols="30" rows="10">列头1,列头2,列头3,列头4,列头5
r1.1,r1.2,r1.3,r1.4,r1.5
r2.1,r2.2,r2.3,r2.4,r2.5
r3.1,r3.2,r3.3,r3.4,r3.5
r4.1,r4.2,r4.3,r4.4,r4.5
r5.1,r5.2,r5.3,r5.4,r5.5
r6.1,r6.2,r6.3,r6.4,r6.5
r7.1,r7.2,r7.3,r7.4,r7.5</textarea>
    <script>
        var text = document.getElementById("textarea").value;
        var blob = new Blob([text], { type: "text/comma-separated-values" });
        var a = document.createElement("a");
        a.href = URL.createObjectURL(blob);
        a.download = "01.csv";
        a.innerHTML = "下载"
        document.body.appendChild(a);
    </script>
</body>
</html>
img_38cf34f059185e335d35ac01b88b8ca8.gif
aa1.gif

2.js导出xls

这个方法是很早前在网上发现的。
其实它的实现原理也很简单就是直接将嵌有HTML表格的HTML代码直接保存为.xls后缀的文件。
这种方式的好处是能保留HTML原来设计好的样式,但是你要事先设置好表格显示排版

img_26da2a6e44e60dee98531bec682db1fe.gif

导出示例:

<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
  <table border="1">
    <tr>
      <th height="40" colspan="6" style="font-size:18px">
        <div align="center">请假条</div>
      </th>
    </tr>
    <tr>
      <td height="40" width="80">
        <div align="center">姓名</div>
      </td>
      <td width="180">&nbsp;</td>
      <td width="80">
        <div align="center">部门</div>
      </td>
      <td width="180">&nbsp;</td>
      <td width="80">
        <div align="center">职务</div>
      </td>
      <td width="180">&nbsp;</td>
    </tr>
    <tr>
      <td height="40" colspan="6">1、请假类别: &nbsp;事假 &nbsp;病假 &nbsp;婚假 &nbsp;丧假 &nbsp;公假 &nbsp;伤假 &nbsp;产假 &nbsp;其他
    </tr>
    <tr>
      <td height="80" colspan="6">
        <p>2、请假事由:</p>
        <p>&nbsp;</p>
      </td>
    </tr>
    <tr>
      <td height="40" colspan="6">3、请假时间:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日</td>
    </tr>
    <tr>
      <td height="40">
        <div align="center">审核意见</div>
      </td>
      <td colspan="5">&nbsp;</td>
    </tr>
  </table>
  <script>
    var tableHTML = document.querySelector("table").outerHTML;
    var xlsContent= `<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"
  xmlns="http://www.w3.org/TR/REC-html40">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="ProgId" content="Excel.Sheet" /> 
</head>
<body>${tableHTML}</body>
</html>`; 
    var blob = new Blob([xlsContent], { type: "application/vnd.ms-excel" });
    var a = document.createElement("a");
    a.href = URL.createObjectURL(blob);
    a.download = "demo.xls";
    a.innerHTML = "下载xls"
    document.body.appendChild(a); 
  </script>
</body>
</html>
img_fd2b52362c78f64786f28be23aa61677.gif
相关文章
|
15天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
22天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
50 0
|
1月前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
21 0
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
37 0
|
1月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 对数据进行判断最大位数是否超过八位
JavaScript随手笔记 --- 对数据进行判断最大位数是否超过八位
|
1月前
|
Java API Apache
使用AOP+反射实现Excel数据的读取
使用AOP+反射实现Excel数据的读取
|
15天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
1天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
4天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
16 0
|
4天前
|
数据库
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法