js导出excel:前端当前数据的导出

Posted 淡淡人生过

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js导出excel:前端当前数据的导出相关的知识,希望对你有一定的参考价值。

网上找的库文件,同样做了修改。在导出的时候,有时候数据第一列和最后一列可能是复选框和操作按钮,这个是我们不需要的,加了这个的过滤
//table2excel.js

/*
* jQuery table2excel - v1.1.1 * jQuery plugin to export an .xls file in browser from an html table * https://github.com/rainabba/jquery-table2excel * * Made by rainabba * Under MIT License */ /* * jQuery table2excel - v1.1.1 * jQuery plugin to export an .xls file in browser from an HTML table * https://github.com/rainabba/jquery-table2excel * * Made by rainabba * Under MIT License * * *把所有的样式移除了 */ //table2excel.js ;(function ( $, window, document, undefined ) { var pluginName = "table2excel", defaults = { exclude: ".noExl",//导出排除的 //name: "Table2Excel",//无用字段 filename: "table2excel",//导出excel的名字 fileext: ".xls",//导出excel的格式 exclude_img: true,//图片是否导出 exclude_links: true,//超链接 exclude_inputs: true,//input的tag sheetName:"sheet",//sheet的名字 excludeFirst:false//是否去除第一列,默认去不掉 }; // The actual plugin constructor function Plugin ( element, options ) { this.element = element; // jQuery has an extend method which merges the contents of two or // more objects, storing the result in the first object. The first object // is generally empty as we don‘t want to alter the default options for // future instances of the plugin //extend把后俩个合并到第一个中 this.settings = $.extend( {}, defaults, options ); this._defaults = defaults; this._name = pluginName; this.init(); } Plugin.prototype = { init: function () { var e = this; var utf8Heading = "<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">"; e.template = { head: "<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">" + utf8Heading + "<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>", sheet: { head: "<x:ExcelWorksheet><x:Name>", tail: "</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>" }, mid: "</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>", table: { head: "<table>", tail: "</table>" }, foot: "</body></html>" }; e.tableRows = []; // get contents of table except for exclude $(e.element).each( function(i,o) { var tempRows = ""; $(o).find("tr").not(e.settings.exclude).each(function (i,p) { tempRows += "<tr>"; //拿到所有的要的数据的th td var data = $(p).find("td,th").not(e.settings.exclude); //这里是把第一列的checkbox排除了 if(e.settings.excludeFirst == true){ data = data.not(":first"); } data.each(function (i,q) { // p did not exist, I corrected var rc = { rows: $(this).attr("rowspan"), cols: $(this).attr("colspan"), flag: $(q).find(e.settings.exclude) }; if( rc.flag.length > 0 ) { tempRows += "<td> </td>"; // exclude it!! } else { if( rc.rows & rc.cols ) { tempRows += "<td>" + $(q).html() + "</td>"; } else { tempRows += "<td"; if( rc.rows > 0) { tempRows += " rowspan=‘" + rc.rows + "‘ "; } if( rc.cols > 0) { tempRows += " colspan=‘" + rc.cols + "‘ "; } tempRows += "/>" + $(q).html() + "</td>"; } } }); tempRows += "</tr>"; console.log(tempRows); }); // exclude img tags if(e.settings.exclude_img) { tempRows = exclude_img(tempRows); } // exclude link tags if(e.settings.exclude_links) { tempRows = exclude_links(tempRows); } // exclude input tags if(e.settings.exclude_inputs) { tempRows = exclude_inputs(tempRows); } e.tableRows.push(tempRows); }); e.tableToExcel(e.tableRows, e.settings.name, e.settings.sheetName); }, tableToExcel: function (table, name, sheetName) { var e = this, fullTemplate="", i, link, a; e.format = function (s, c) { return s.replace(/{(w+)}/g, function (m, p) { return c[p]; }); }; sheetName = typeof sheetName === "undefined" ? "Sheet" : sheetName; e.ctx = { // worksheet: name || "Worksheet",//这个字段无用 table: table, sheetName: sheetName }; fullTemplate= e.template.head; if ( $.isArray(table) ) { for (i in table) { //fullTemplate += e.template.sheet.head + "{" + e.ctx.worksheet + i + "}" + e.template.sheet.tail; fullTemplate += e.template.sheet.head + sheetName + i + e.template.sheet.tail; } } fullTemplate += e.template.mid; if ( $.isArray(table) ) { for (i in table) { fullTemplate += e.template.table.head + "{table" + i + "}" + e.template.table.tail; } } fullTemplate += e.template.foot; for (i in table) { e.ctx["table" + i] = table[i]; } delete e.ctx.table; var isIE = /*@[email protected]*/false || !!document.documentMode; // this works with IE10 and IE11 both :) //if (typeof msie !== "undefined" && msie > 0 || !!navigator.userAgent.match(/Trident.*rv:11./)) // this works ONLY with IE 11!!! if (isIE) { if (typeof Blob !== "undefined") { //use blobs if we can fullTemplate = e.format(fullTemplate, e.ctx); // with this, works with IE fullTemplate = [fullTemplate]; //convert to array var blob1 = new Blob(fullTemplate, { type: "text/html" }); window.navigator.msSaveBlob(blob1, getFileName(e.settings) ); } else { //otherwise use the iframe and save //requires a blank iframe on page called txtArea1 txtArea1.document.open("text/html", "replace"); txtArea1.document.write(e.format(fullTemplate, e.ctx)); txtArea1.document.close(); txtArea1.focus(); sa = txtArea1.document.execCommand("SaveAs", true, getFileName(e.settings) ); } } else { var blob = new Blob([e.format(fullTemplate, e.ctx)], {type: "application/vnd.ms-excel"}); window.URL = window.URL || window.webkitURL; link = window.URL.createObjectURL(blob); a = document.createElement("a"); a.download = getFileName(e.settings); a.href = link; document.body.appendChild(a); a.click(); document.body.removeChild(a); } return true; } }; function getFileName(settings) { return ( settings.filename ? settings.filename : "table2excel" ); } // Removes all img tags function exclude_img(string) { var _patt = /(s+alts*=s*"([^"]*)"|s+alts*=s*‘([^‘]*)‘)/i; return string.replace(/<img[^>]*>/gi, function myFunction(x){ var res = _patt.exec(x); if (res !== null && res.length >=2) { return res[2]; } else { return ""; } }); } // Removes all link tags function exclude_links(string) { return string.replace(/<a[^>]*>|</a>/gi, ""); } // Removes input params function exclude_inputs(string) { var _patt = /(s+values*=s*"([^"]*)"|s+values*=s*‘([^‘]*)‘)/i; return string.replace(/<input[^>]*>|</input>/gi, function myFunction(x){ var res = _patt.exec(x); if (res !== null && res.length >=2) { return res[2]; } else { return ""; } }); } $.fn[ pluginName ] = function ( options ) { var e = this; e.each(function() { //console.log(options) if ( !$.data( e, "plugin_" + pluginName ) ) { $.data( e, "plugin_" + pluginName, new Plugin( this, options ) ); } }); // chain jQuery functions return e; }; })( jQuery, window, document );

前端页面的样子

<div class="layui-row">
    <table class="layui-table"
        lay-data="{url:‘/student/student/oneListJson‘, page:true, id:‘idTable‘, limit: 10}"
        lay-filter="mtable">
        <thead>
            <tr>
                <th lay-data="{checkbox:true, fixed: true}"></th>
                <th lay-data="{templet:‘#studentName‘}">#(i18n.get(‘学生姓名‘))</th>
                <th lay-data="{field:‘studentEnglishName‘}">#(i18n.get(‘英文姓名‘))</th>
                <th lay-data="{field:‘birthDateStr‘}">#(i18n.get(‘出生日期‘))</th>
                <th lay-data="{templet:‘#sex‘}">#(i18n.get(‘性别‘))</th>
                <th lay-data="{field:‘originalSchool‘}">#(i18n.get(‘就读学校‘))</th>
                <th lay-data="{field:‘campusName‘}">#(i18n.get(‘所属校区‘))</th>
                <th lay-data="{field:‘remarks‘}">#(i18n.get(‘备注‘))</th>
                <th lay-data="{width:60, templet: ‘#status‘}">#(i18n.get(‘状态‘))</th>
            </tr>
        </thead>
    </table>
</div>

layui的数据表格也可以使用的,简单table也可以使用的


<button type="button" class="layui-btn layui-btn-primary layui-btn-sm" id="export_excel">导出本页数据</button>

使用方式

<!-- 导出 -->
<script type="text/javascript" src="/assets/layui-v2.4.3/table2excel.js"></script>
<script type="text/javascript" src="/assets/layui-v2.4.3/table2excels.js"></script>
 <script>
     //导出Excel
    $("#export_excel").on(‘click‘, function() {

        $(".layui-table-box").table2excel({
            exclude: ".noExl",
            filename: "myFileName" + new Date().toISOString().replace(/[-:.]/g, ""),
            fileext: ".xls",
            exclude_img: true,
            exclude_links: true,
            exclude_inputs: true,
            sheetName: "student",
            excludeFirst:true,
       excludeFirst:false

}); }); </script>

 





以上是关于js导出excel:前端当前数据的导出的主要内容,如果未能解决你的问题,请参考以下文章

js 实现纯前端将数据导出excel两种方式,亲测有效

js 实现纯前端将数据导出excel两种方式,亲测有效

前端js导出CSV,Excel格式文件

如何实现SpreadJS的纯前端Excel导入导出

vue项目中如何把表格导出excel表格

前端js导出excel