|
@@ -0,0 +1,188 @@
|
|
|
+/*
|
|
|
+ * 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
|
|
|
+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: '<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"><head><meta charset="UTF-8"><!--[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]--><style>td{vnd.ms-excel.numberformat:@}</style></head><body>',
|
|
|
+ table: {
|
|
|
+ head: "<table border='1'>",
|
|
|
+ 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, o) {
|
|
|
+ tempRows += "<tr align='center' valign='center'>" + $(o).html() + '</tr>'
|
|
|
+ })
|
|
|
+ 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(/<img[^>]*>/gi, '')
|
|
|
+ }
|
|
|
+
|
|
|
+ // Removes all link tags
|
|
|
+ function exclude_links(string) {
|
|
|
+ return string.replace(/<A[^>]*>|<\/A>/g, '')
|
|
|
+ }
|
|
|
+
|
|
|
+ // Removes input params
|
|
|
+ function exclude_inputs(string) {
|
|
|
+ return string.replace(/<input[^>]*>|<\/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)
|