From e8eafe6030cb9f425f715c03782af733af956fd9 Mon Sep 17 00:00:00 2001 From: Jordi Burgos Date: Sat, 21 Jan 2017 12:57:11 +0000 Subject: [PATCH] Fix export module. --- excellentexport.js | 317 +++++++++++++++++++++-------------------- excellentexport.min.js | 7 +- index.bigtable.html | 80 +++++++++++ index.html | 27 +--- 4 files changed, 243 insertions(+), 188 deletions(-) create mode 100644 index.bigtable.html diff --git a/excellentexport.js b/excellentexport.js index a742923..64f9904 100644 --- a/excellentexport.js +++ b/excellentexport.js @@ -1,158 +1,159 @@ -/** - * ExcellentExport 2.0.2 - * A client side Javascript export to Excel. - * - * @author: Jordi Burgos (jordiburgos@gmail.com) - * @url: https://github.com/jmaister/excellentexport - * - */ -/*jslint browser: true, bitwise: true, vars: true, white: true */ -/*global define, exports, module */ - -(function (global) { - 'use strict'; - -var ExcellentExport = (function() { - - function b64toBlob(b64Data, contentType, sliceSize) { - // function taken from http://stackoverflow.com/a/16245768/2591950 - // author Jeremy Banks http://stackoverflow.com/users/1114/jeremy-banks - contentType = contentType || ''; - sliceSize = sliceSize || 512; - - var byteCharacters = window.atob(b64Data); - var byteArrays = []; - - var offset; - for (offset = 0; offset < byteCharacters.length; offset += sliceSize) { - var slice = byteCharacters.slice(offset, offset + sliceSize); - - var byteNumbers = new Array(slice.length); - var i; - for (i = 0; i < slice.length; i = i + 1) { - byteNumbers[i] = slice.charCodeAt(i); - } - - var byteArray = new window.Uint8Array(byteNumbers); - - byteArrays.push(byteArray); - } - - var blob = new window.Blob(byteArrays, { - type: contentType - }); - return blob; - } - - var version = "2.0.2"; - var uri = {excel: 'data:application/vnd.ms-excel;base64,', csv: 'data:application/csv;base64,'}; - var template = {excel: ' {table}
'}; - var csvDelimiter = ","; - var csvNewLine = "\r\n"; - var base64 = function(s) { - return window.btoa(window.unescape(encodeURIComponent(s))); - }; - var format = function(s, c) { - return s.replace(new RegExp("{(\\w+)}", "g"), function(m, p) { - return c[p]; - }); - }; - - var get = function(element) { - if (!element.nodeType) { - return document.getElementById(element); - } - return element; - }; - - var fixCSVField = function(value) { - var fixedValue = value; - var addQuotes = (value.indexOf(csvDelimiter) !== -1) || (value.indexOf('\r') !== -1) || (value.indexOf('\n') !== -1); - var replaceDoubleQuotes = (value.indexOf('"') !== -1); - - if (replaceDoubleQuotes) { - fixedValue = fixedValue.replace(/"/g, '""'); - } - if (addQuotes || replaceDoubleQuotes) { - fixedValue = '"' + fixedValue + '"'; - } - - return fixedValue; - }; - - var tableToCSV = function(table) { - var data = ""; - var i, j, row, col; - for (i = 0; i < table.rows.length; i=i+1) { - row = table.rows[i]; - for (j = 0; j < row.cells.length; j=j+1) { - col = row.cells[j]; - data = data + (j ? csvDelimiter : '') + fixCSVField(col.textContent.trim()); - } - data = data + csvNewLine; - } - return data; - }; - - function createDownloadLink(anchor, base64data, exporttype, filename) { - var blob; - if (window.navigator.msSaveBlob) { - blob = b64toBlob(base64data, exporttype); - window.navigator.msSaveBlob(blob, filename); - return false; - } else if(window.URL.createObjectURL) { - blob = b64toBlob(base64data, exporttype); - var blobUrl = window.URL.createObjectURL(blob); - anchor.href = blobUrl; - } else { - var hrefvalue = "data:" + exporttype + ";base64," + base64data; - anchor.download = filename; - anchor.href = hrefvalue; - } - - // Return true to allow the link to work - return true; - } - - var ee = { - /** @export */ - excel: function(anchor, table, name) { - table = get(table); - var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; - var b64 = base64(format(template.excel, ctx)); - return createDownloadLink(anchor, b64, 'application/vnd.ms-excel','export.xls'); - }, - /** @export */ - csv: function(anchor, table, delimiter, newLine) { - if (delimiter !== undefined && delimiter) { - csvDelimiter = delimiter; - } - if (newLine !== undefined && newLine) { - csvNewLine = newLine; - } - - table = get(table); - var csvData = "\uFEFF" + tableToCSV(table); - var b64 = base64(csvData); - return createDownloadLink(anchor,b64,'application/csv','export.csv'); - } - }; - - return ee; -}()); - - // AMD support - if (typeof define === 'function' && define.amd) { - define(function () { return ExcellentExport; }); - // CommonJS and Node.js module support. - } else if (typeof exports !== 'undefined') { - // Support Node.js specific `module.exports` (which can be a function) - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = ExcellentExport; - } - // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function) - exports.ExcellentExport = ExcellentExport; - } else { - global.ExcellentExport = ExcellentExport; - } -})(this); +/** + * ExcellentExport 2.0.3 + * A client side Javascript export to Excel. + * + * @author: Jordi Burgos (jordiburgos@gmail.com) + * @url: https://github.com/jmaister/excellentexport + * + */ +/*jslint browser: true, bitwise: true, vars: true, white: true */ +/*global define, exports, module */ + +(function (global) { + 'use strict'; + +var ExcellentExport = (function() { + + function b64toBlob(b64Data, contentType, sliceSize) { + // function taken from http://stackoverflow.com/a/16245768/2591950 + // author Jeremy Banks http://stackoverflow.com/users/1114/jeremy-banks + contentType = contentType || ''; + sliceSize = sliceSize || 512; + + var byteCharacters = window.atob(b64Data); + var byteArrays = []; + + var offset; + for (offset = 0; offset < byteCharacters.length; offset += sliceSize) { + var slice = byteCharacters.slice(offset, offset + sliceSize); + + var byteNumbers = new Array(slice.length); + var i; + for (i = 0; i < slice.length; i = i + 1) { + byteNumbers[i] = slice.charCodeAt(i); + } + + var byteArray = new window.Uint8Array(byteNumbers); + + byteArrays.push(byteArray); + } + + var blob = new window.Blob(byteArrays, { + type: contentType + }); + return blob; + } + + var version = "2.0.3"; + var uri = {excel: 'data:application/vnd.ms-excel;base64,', csv: 'data:application/csv;base64,'}; + var template = {excel: ' {table}
'}; + var csvDelimiter = ","; + var csvNewLine = "\r\n"; + var base64 = function(s) { + return window.btoa(window.unescape(encodeURIComponent(s))); + }; + var format = function(s, c) { + return s.replace(new RegExp("{(\\w+)}", "g"), function(m, p) { + return c[p]; + }); + }; + + var get = function(element) { + if (!element.nodeType) { + return document.getElementById(element); + } + return element; + }; + + var fixCSVField = function(value) { + var fixedValue = value; + var addQuotes = (value.indexOf(csvDelimiter) !== -1) || (value.indexOf('\r') !== -1) || (value.indexOf('\n') !== -1); + var replaceDoubleQuotes = (value.indexOf('"') !== -1); + + if (replaceDoubleQuotes) { + fixedValue = fixedValue.replace(/"/g, '""'); + } + if (addQuotes || replaceDoubleQuotes) { + fixedValue = '"' + fixedValue + '"'; + } + + return fixedValue; + }; + + var tableToCSV = function(table) { + var data = ""; + var i, j, row, col; + for (i = 0; i < table.rows.length; i=i+1) { + row = table.rows[i]; + for (j = 0; j < row.cells.length; j=j+1) { + col = row.cells[j]; + data = data + (j ? csvDelimiter : '') + fixCSVField(col.textContent.trim()); + } + data = data + csvNewLine; + } + return data; + }; + + function createDownloadLink(anchor, base64data, exporttype, filename) { + var blob; + if (window.navigator.msSaveBlob) { + blob = b64toBlob(base64data, exporttype); + window.navigator.msSaveBlob(blob, filename); + return false; + } else if(window.URL.createObjectURL) { + blob = b64toBlob(base64data, exporttype); + var blobUrl = window.URL.createObjectURL(blob); + anchor.href = blobUrl; + } else { + var hrefvalue = "data:" + exporttype + ";base64," + base64data; + anchor.download = filename; + anchor.href = hrefvalue; + } + + // Return true to allow the link to work + return true; + } + + var ee = { + version: function() { + return version; + }, + excel: function(anchor, table, name) { + table = get(table); + var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; + var b64 = base64(format(template.excel, ctx)); + return createDownloadLink(anchor, b64, 'application/vnd.ms-excel','export.xls'); + }, + csv: function(anchor, table, delimiter, newLine) { + if (delimiter !== undefined && delimiter) { + csvDelimiter = delimiter; + } + if (newLine !== undefined && newLine) { + csvNewLine = newLine; + } + + table = get(table); + var csvData = "\uFEFF" + tableToCSV(table); + var b64 = base64(csvData); + return createDownloadLink(anchor,b64,'application/csv','export.csv'); + } + }; + + return ee; +}()); + + // AMD support + if (typeof define === 'function' && define.amd) { + define(function () { return ExcellentExport; }); + // CommonJS and Node.js module support. + } else if (typeof exports !== 'undefined') { + // Support Node.js specific `module.exports` (which can be a function) + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = ExcellentExport; + } + // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function) + exports.ExcellentExport = ExcellentExport; + } else { + global.ExcellentExport = ExcellentExport; + } +})(this); diff --git a/excellentexport.min.js b/excellentexport.min.js index a86e8f0..efba5f4 100644 --- a/excellentexport.min.js +++ b/excellentexport.min.js @@ -1,11 +1,8 @@ /** - * ExcellentExport 2.0.2 + * ExcellentExport 2.0.3 * A client side Javascript export to Excel. * * @author: Jordi Burgos (jordiburgos@gmail.com) * @url: https://github.com/jmaister/excellentexport */ - (function(r){var l=function(){function l(e){return' \x3c!--[if gte mso 9]>{worksheet}{table}
'.replace(RegExp("{(\\w+)}", - "g"),function(a,b){return e[b]})}function n(e,a){var b;a=a||"";b=b||512;var c=window.atob(e),h=[],g;for(g=0;g {table}
'},r=",",i="\r\n",c=function(e){return window.btoa(window.unescape(encodeURIComponent(e)))},a=function(e,t){return e.replace(RegExp("{(\\w+)}","g"),function(e,n){return t[n]})},l=function(e){return e.nodeType?e:document.getElementById(e)},s=function(e){var t=e,n=-1!==e.indexOf(r)||-1!==e.indexOf("\r")||-1!==e.indexOf("\n"),o=-1!==e.indexOf('"');return o&&(t=t.replace(/"/g,'""')),(n||o)&&(t='"'+t+'"'),t},x=function(e){var t,n,o,c,a="";for(t=0;t + + + Export to excel test + + + + +

ExcellentExport.js

+ + Check on jordiburgos.com and GitHub. + +

Test page

+ +
+ + Export to Excel +
+ + Export to CSV - UTF8 +
+ Export to CSV - Using semicolon ";" separator - UTF8 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Column 1Column "cool" 2Column 3Column 4
100,111200300áéíóú
400500Chinese chars: 解决导出csv中文乱码问题àèìòù
TextMore textText with + new lineç ñ ÄËÏÖÜ äëïöü
+ + +
+
+ Export to Excel very big table
+ Export to CSV very big table + +
+
+ + + diff --git a/index.html b/index.html index c20a335..d7e0471 100644 --- a/index.html +++ b/index.html @@ -11,9 +11,9 @@

ExcellentExport.js

- + Check on jordiburgos.com and GitHub. - +

Test page


@@ -53,28 +53,5 @@

Test page

ç ñ ÄËÏÖÜ äëïöü - - -
-
- Export to Excel very big table
- Export to CSV very big table - -
-
-