/*
* 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)