zoukankan      html  css  js  c++  java
  • vue页面原样导出excel表格

    github地址:https://github.com/wuzhiaite/vue-samples

    1.excel导出

      做过业务系统的知道,进行涉及到excel的导出,列表数据动则几十万,但是也有一部分分组数据,数据量不是很多,但是数据结构比较复杂。所以后台导出的方式就不是很好。
      因此有的时候,当 ==**表格结构比较复杂**== 的时候,我们需要前台页面导出。
    

    下面我们分析一下怎么做:

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

    2.结合上面的代码,给出一个完整的实例

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <meta charset="utf-8" />
        <style>
            table {
                border-collapse: collapse;
            }
        </style>
    </head>
    <body >
    <div id="app">
        <!-- 设置border="1"以显示表格框线 -->
        <table border="1">
            <!-- caption元素可以生成表标题,其单元格列跨度为表格的列数 -->
            <caption>商品清单</caption>
            <tr>
                <th rowspan="2">序号</th>
                <th rowspan="2">商品编号</th>
                <th rowspan="2">分类</th>
                <th colspan="3">价格</th>
            </tr>
            <tr>
                <th>国产</th>
                <th>进口</th>
            </tr>
            <tr>
                <td>1</td>
                <td>201111</td>
                <td>手机</td>
                <td>2000</td>
                <td>5000</td>
            </tr>
            <tr>
                <td>2</td>
                <td>2021243</td>
                <td>电脑</td>
                <td>96000</td>
                <td>5000</td>
            </tr>
        </table>
        <a>导出excel</a>
    </div>	
    	<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
    		var app = new Vue({
    	el:"#app",
    	data:function(){
    		return {}
    	},
    	created(){
    		// 使用outerHTML属性获取整个table元素的HTML代码(包括<table>标签),然后包装成一个完整的HTML文档,设置charset为urf-8以防止中文乱码
            var html = "<html><head><meta charset='utf-8' /></head><body>" + document.getElementsByTagName("table")[0].outerHTML + "</body></html>";
            // 实例化一个Blob对象,其构造函数的第一个参数是包含文件内容的数组,第二个参数是包含文件类型属性的对象
            var blob = new Blob([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";
    	},
    	methods:{
    	}
    	
    })      
        </script>
    </body>
    </html>
    

    3.导出的表格样式

    以上,就是一个简单的页面导出excel过程;

  • 相关阅读:
    济群法师:《大乘百法明门论》讲记·视频·音频·MP3
    dict.cn海词:划词助手划遍天下网
    求解:nunit如何测试ConfigurationManager呢?
    spring.net快速入门
    好书推荐:《数学与知识的探求》
    《货币战争》的一点感想
    买了《精通spring 2.0》
    《spring 2.0技术手册》的技术写作方式值得学习!
    关于Erlang语言
    rss阅读器最重要的几项功能
  • 原文地址:https://www.cnblogs.com/perferect/p/12927026.html
Copyright © 2011-2022 走看看