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

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>
aa1.gif

2.js导出xls

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

导出示例:

<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>

推荐阅读更多精彩内容

  • 不知道大家有没有人相信命运。一直以来,我都是一个不怎么相信命运这种东西,我一直觉得只要自己去努力,什么事都会有所改...
    懒小牛要奋斗阅读 585评论 0 51
  • 最近《人民的名义》那是火得不要不要的。 话说看到后来,我一向看好的育良书记和吴老师闹掰了呢!竟然还,还,还离婚了呢...
    萌马记阅读 1,083评论 1 2
  • 表达的巨人 说得天下无敌,做就有心无力。这应该是我们在职场或生活中普遍会遇到的人。一般来说,他们可以把一件事说成宏...
    隔着银河阅读 330评论 0 1
  • 读牌:有三个人地上丢了几把见一个面手里拿着三把剑,一个朝大海,一个低头 牌意:一个很高兴的在捡宝剑这个一直在旁观等...
    telmywhy静阅读 185评论 0 0