前端实现导出table表格为Excel、CSV
js实现导出table表格为Excel
jquery.table2excel.js
要基于jquery的基础上才能使用,是一款专门导出excel的插件
jquery-3.3.1.js
下载http://www.jq22.com/jquery-info122
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width" /> <title>download</title> <script src="js/jquery-3.3.1.js"></script> <script src="js/jquery.table2excel.js"></script> <style> #down { width: 100px; height: 26px; background-color: #2ca2d0; border: 1px solid #2ca2d0; margin: 1%; } </style> </head> <body> <table id="example" border="1"cellspacing="0"> <thead> <tr> <th>周周</th> <th>越越</th> <th>洋洋</th> </tr> </thead> <tbody> <tr> <td>去爬山吗</td> <td>去爬山吗</td> <td>去爬山吗</td> </tr> <tr> <td>你看我还有机会吗</td> <td>你看我还有机会吗</td> <td>你看我还有机会吗</td> </tr> </tbody> </table> <button id="down" onclick="download()" style="margin-left: 300px">导出为excel</button> <script> function download() { $("#example").table2excel({ exclude: ".noExl", name: "Excel Document Name", // Excel文件的名称 filename: "表名", exclude_img: true, exclude_links: true, exclude_inputs: true }); } </script> </body> </html>
jquery.table2excel.js
(下载地址:https://github.com/rainabba/jquery-table2excel/tree/master/src)
/* * jQuery table2excel - v1.1.2 * 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", fileext: ".xls", exclude_img: true, exclude_links: true, exclude_inputs: true, preserveColors: 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 // 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 = []; // Styling variables var additionalStyles = ""; var compStyle = null; // 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) { // Reset for this row additionalStyles = ""; // Preserve background and text colors on the row if(e.settings.preserveColors){ compStyle = getComputedStyle(p); additionalStyles += (compStyle && compStyle.backgroundColor ? "background-color: " + compStyle.backgroundColor + ";" : ""); additionalStyles += (compStyle && compStyle.color ? "color: " + compStyle.color + ";" : ""); } // Create HTML for Row tempRows += "<tr style='" + additionalStyles + "'>"; // Loop through each TH and TD $(p).find("td,th").not(e.settings.exclude).each(function (i,q) { // p did not exist, I corrected // Reset for this column additionalStyles = ""; // Preserve background and text colors on the row if(e.settings.preserveColors){ compStyle = getComputedStyle(q); additionalStyles += (compStyle && compStyle.backgroundColor ? "background-color: " + compStyle.backgroundColor + ";" : ""); additionalStyles += (compStyle && compStyle.color ? "color: " + compStyle.color + ";" : ""); } 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 { tempRows += "<td"; if( rc.rows > 0) { tempRows += " rowspan='" + rc.rows + "' "; } if( rc.cols > 0) { tempRows += " colspan='" + rc.cols + "' "; } if(additionalStyles){ tempRows += " style='" + additionalStyles + "'"; } tempRows += ">" + $(q).html() + "</td>"; } }); tempRows += "</tr>"; }); // 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) ) { Object.keys(table).forEach(function(i){ //fullTemplate += e.template.sheet.head + "{worksheet" + i + "}" + e.template.sheet.tail; fullTemplate += e.template.sheet.head + sheetName + i + e.template.sheet.tail; }); } fullTemplate += e.template.mid; if ( $.isArray(table) ) { Object.keys(table).forEach(function(i){ 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 = navigator.appVersion.indexOf("MSIE 10") !== -1 || (navigator.userAgent.indexOf("Trident") !== -1 && navigator.userAgent.indexOf("rv:11") !== -1); // 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+alt\s*=\s*"([^"]*)"|\s+alt\s*=\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+value\s*=\s*"([^"]*)"|\s+value\s*=\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() { if ( !$.data( e, "plugin_" + pluginName ) ) { $.data( e, "plugin_" + pluginName, new Plugin( this, options ) ); } }); // chain jQuery functions return e; }; })( jQuery, window, document );
JS 实现导出table表格为CSV
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>download</title> @*引入jquery*@ <script src="~/Scripts/jquery-3.3.1.js"></script> <style> #down { width: 100px; height: 26px; background-color: #2ca2d0; border: 1px solid #2ca2d0; margin: 1%; } </style> </head> <body> <table id="example" border="1"cellspacing="0"> <thead> <tr> <th>语文</th> <th>数学</th> <th>英语</th> </tr> </thead> <tbody> <tr> <td>90</td> <td>90</td> <td>90</td> </tr> <tr> <td>80</td> <td>80</td> <td>80</td> </tr> </tbody> </table> <button id="down" onclick="download()">导出为CSV</button> <script> function download() { $(document).on("click", "#down", function () {//按钮点击事件 var $trs = $("#example").find("tr");//表格id元素 var str = ""; for (var i = 0; i < $trs.length; i++) { var $tds = $trs.eq(i).find("td,th"); for (var j = 0; j < $tds.length; j++) { str += $tds.eq(j).text() + ","; } str += "\n"; } var aaaa = "data:text/csv;charset=utf-8,\ufeff" + str; var link = document.createElement("a"); link.setAttribute("href", aaaa); link.setAttribute("download", "xxx.csv");//表名 link.click(); }); }); } </script> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了