前端js 下载xls表格

最近在做的项目中,需要有一个将页面展示的数据下载下来的功能,做爬虫的我感觉到了前端知识的匮乏

面对需求,脑海中最先涌现出的是两个方向来实现

  1. 由后端把xls表格制作出来,然后前端只需点击 a标签即可完成下载
  2. 前端将页面数据或者 json数据稍作处理,制作成 .xls文件,然后导出

刚开始感觉,第一种方法实现起来或许更加顺手,但是考虑到后期服务器可能存在的压力,为了分散服务端压力,所以将这个功能交给浏览器来完成,使用第2种方法来实现

此处借鉴了这个大神的文章,感谢 js 实现纯前端将数据导出excel两种方式,亲测有效





下边代码实现的是将用于展示页面的 json数据,重复利用,转换成base64数据用于下载

function pageToExcel(jsonData){  //参数 jsonData 是从后端接收的接送数据:包含xls文件中所有要保存的数据
			// str 是xls文件内表格的标题
          let str = '序号位置排名图URL标题是否天猫价格销量收获量店铺DSR信用发货地';
          for(let i = 0 ; i < jsonData.length ; i++ ){

              var goods = jsonData[i].goods;  //由于jsonData 内部有的元素是字典,所以提前转换

              var shop = jsonData[i].shop;

              var seller = jsonData[i].seller;

              var order = "第"+jsonData[i]['page_order']+"页 总排名:" + jsonData[i]['rank_order'];

              var DSR = "服务" +shop.dsr.service+ "描述"+shop.dsr.description+"物流"+shop.dsr.delivery;
              var num = i + 1;  //序号
				// str_ 行数据模板
              let str_ = ''+num+''+order+''+goods.picSrc+''+goods.title+''+goods.is_tmall+''+goods.price+''+goods.sales_count+''+goods.confirm_sales_count+''+shop.name+''+DSR+''+seller.sellerCredit+''+goods.shop_location+'';
              str += str_;
          }
          //Worksheet名
          let worksheet = 'Sheet1';  
          // let uri = 'data:application/vnd.ms-excel;base64,';
          let uri = 'data:application/vnd.ms-excel;base64,';

          //下载的表格模板数据
          let template = `
          
            ${str}
`
; //下载模板 var query = document.getElementById('tb_search_key').value; var a = document.createElement("a"); //为了给xls文件命名,重新创建一个a元素 a.href = uri + base64(template); // 给a元素设置 href属性 a.download =query + '.xls'; // 给a元素设置下载名称 a.click(); // 点击a标签 下载文件 } //输出base64编码 function base64 (s) { return window.btoa(unescape(encodeURIComponent(s))) }

这是结合自己项目中实际情况的代码,可以根据自己的实际应用场景,稍加修改
自己做个记录,希望能帮到你

下边是自己找的demo

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <style>
        /* 此样式仅用于浏览器页面效果,Excel不会分离表格边框,不需要此样式 */
        table {
            border-collapse: collapse;
        }
    </style>
</head>
<body>
    <!-- 设置border="1"以显示表格框线 -->
    <table border="1">
        <!-- caption元素可以生成表标题,其单元格列跨度为表格的列数 -->
        <caption>学生成绩表</caption>
        <tr>
            <!-- 可以使用rowspan和colspan来合并单元格 -->
            <th rowspan="2">编号</th>
            <th rowspan="2">学号</th>
            <th rowspan="2">姓名</th>
            <th rowspan="2">性别</th>
            <th rowspan="2">年龄</th>
            <th colspan="3">成绩</th>
        </tr>
        <tr>
            <th>语文</th>
            <th>数学</th>
            <th>英语</th>
        </tr>
        <tr>
            <td>1</td>
            <td>2016001</td>
            <td>张三</td>
            <td></td>
            <td>13</td>
            <td>85</td>
            <td>94</td>
            <td>77</td>
        </tr>
        <tr>
            <td>2</td>
            <td>2016002</td>
            <td>李四</td>
            <td></td>
            <td>12</td>
            <td>96</td>
            <td>84</td>
            <td>89</td>
        </tr>
    </table>

    <a>导出表格</a>

    <script>
        // 使用outerHTML属性获取整个table元素的HTML代码(包括标签),然后包装成一个完整的HTML文档,设置charset为urf-8以防止中文乱码var html =""+ document.getElementsByTagName("table")[0].outerHTML +"";// 实例化一个Blob对象,其构造函数的第一个参数是包含文件内容的数组,第二个参数是包含文件类型属性的对象var blob =newBlob([html],{ type:"application/vnd.ms-excel"});var a = document.getElementsByTagName("a")[0];// 利用URL.createObjectURL()方法为a元素生成blob URL
        a.href =URL.createObjectURL(blob);// 设置文件名
        a.download ="学生成绩表.xls";</script></body></html>

你可能感兴趣的:(JS)