/* * jQuery table2excel - v1.0.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 此导出方法如需样式生效,请把行内样式写在td身上 import jQuery from 'jquery'; (function ($, window, document, undefined) { var pluginName = 'table2excel', defaults = { exclude: '.noExl', name: 'Table2Excel', } // 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 e.template = { head: '', table: { head: "", tail: '
', }, foot: '', } 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, o) { tempRows += "" + $(o).html() + '' }) e.tableRows.push(tempRows) }) // exclude img tags if (e.settings.exclude_img) { e.tableRows[0] = exclude_img(e.tableRows[0]) } // exclude link tags if (e.settings.exclude_links) { e.tableRows[0] = exclude_links(e.tableRows[0]) } // exclude input tags if (e.settings.exclude_inputs) { e.tableRows[0] = exclude_inputs(e.tableRows[0]) } e.tableToExcel(e.tableRows, e.settings.name, e.settings.sheetName) }, tableToExcel: function (table, name, sheetName) { var e = this, fullTemplate = '', i, link, a e.uri = 'data:application/vnd.ms-excel;base64,' e.base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } e.format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p] }) } e.ctx = { worksheet: name || 'Worksheet', table: table, } fullTemplate = e.template.head if ($.isArray(table)) { for (i in table) { //fullTemplate += e.template.sheet.head + "{worksheet" + i + "}" + e.template.sheet.tail; fullTemplate += e.template.sheet.head + sheetName + 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 if ((typeof msie !== 'undefined' && msie > 0) || !!navigator.userAgent.match(/Trident.*rv\:11\./)) { // If Internet Explorer if (typeof Blob !== 'undefined') { //use blobs if we can 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(fullTemplate) txtArea1.document.close() txtArea1.focus() sa = txtArea1.document.execCommand('SaveAs', true, getFileName(e.settings)) } } else { link = e.uri + e.base64(e.format(fullTemplate, e.ctx)) a = document.createElement('a') a.download = getFileName(e.settings) a.href = link a.click() } return true }, } function getFileName(settings) { return (settings.filename ? settings.filename : 'table2excel') + '.xls' } // Removes all img tags function exclude_img(string) { return string.replace(/]*>/gi, '') } // Removes all link tags function exclude_links(string) { return string.replace(/]*>|<\/A>/g, '') } // Removes input params function exclude_inputs(string) { return string.replace(/]*>|<\/input>/gi, '') } $.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)