From 1f28bdb08e7bec12d7004d2e277652ffa0524572 Mon Sep 17 00:00:00 2001 From: hhurz Date: Mon, 3 Aug 2015 13:09:19 +0200 Subject: [PATCH] csv export failed when using tab as field separator --- tableExport.js | 40 +++++++++++++++++++++++--------------- tableExport.min.js | 48 +++++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/tableExport.js b/tableExport.js index bddf203..b9f10d2 100644 --- a/tableExport.js +++ b/tableExport.js @@ -65,17 +65,23 @@ if (defaults.type == 'csv' || defaults.type == 'txt') { // Header - var tdData = ""; + var csvData = ""; var rowIndex = 0; $(el).find('thead').first().find(defaults.theadSelector).each(function () { - tdData += "\n"; + trData = ""; ForEachVisibleCell(this, 'th,td', rowIndex, function (cell, row, col) { - tdData += csvString(cell, row, col) + defaults.csvSeparator; + trData += csvString(cell, row, col) + defaults.csvSeparator; }); + trData = $.trim(trData).substring(0, trData.length - 1); + if (trData.length > 0) { + + if (csvData.length > 0) + csvData += "\n"; + + csvData += trData; + } rowIndex++; - tdData = $.trim(tdData); - tdData = $.trim(tdData).substring(0, tdData.length - 1); }); // Row vs Column @@ -85,33 +91,37 @@ function (cell, row, col) { trData += csvString(cell, row, col) + defaults.csvSeparator; }); - if (trData.length > defaults.csvSeparator.length) - tdData += "\n" + trData; + trData = $.trim(trData).substring(0, trData.length - 1); + if (trData.length > 0) { + + if (csvData.length > 0) + csvData += "\n"; + + csvData += trData; + } rowIndex++; - //tdData = $.trim(tdData); - tdData = $.trim(tdData).substring(0, tdData.length - 1); }); - tdData += "\n"; + csvData += "\n"; //output if (defaults.consoleLog === true) - console.log(tdData); + console.log(csvData); if (defaults.outputMode === 'string') - return tdData; + return csvData; if (defaults.outputMode === 'base64') - return base64encode(tdData); + return base64encode(csvData); try { - var blob = new Blob([(defaults.type == 'csv' ? '\ufeff' : '') + tdData], {type: "text/" + (defaults.type == 'csv' ? 'csv' : 'plain') + ";charset=utf-8"}); + var blob = new Blob([(defaults.type == 'csv' ? '\ufeff' : '') + csvData], {type: "text/" + (defaults.type == 'csv' ? 'csv' : 'plain') + ";charset=utf-8"}); saveAs(blob, defaults.fileName + '.' + defaults.type); } catch (e) { downloadFile(defaults.fileName + '.' + defaults.type, 'data:text/' + (defaults.type == 'csv' ? 'csv' : 'plain') + ';charset=utf-8,' + (defaults.type == 'csv' ? '\ufeff' : '') + - encodeURIComponent(tdData)); + encodeURIComponent(csvData)); } } else if (defaults.type == 'sql') { diff --git a/tableExport.min.js b/tableExport.min.js index cb2c89c..9202869 100644 --- a/tableExport.min.js +++ b/tableExport.min.js @@ -1,24 +1,24 @@ -(function(f){f.fn.extend({tableExport:function(q){function t(l,e,d,h){f(l).filter(":visible").find(e).each(function(l){if("none"!=f(this).css("display")&&"none"!=f(this).data("tableexport-display")&&-1==a.ignoreColumn.indexOf(l)&&"function"===typeof h){var e=0;if("undefined"!=typeof w[d]&&0f?h+=String.fromCharCode(f):(127f?h+=String.fromCharCode(f>>6|192):(h+=String.fromCharCode(f>>12|224),h+=String.fromCharCode(f>>6&63|128)),h+=String.fromCharCode(f&63|128));for(a=h;m>2,d=(d&3)<<4|h>>4,g=(h&15)<<2|b>>6,k=b&63,isNaN(h)?g=k=64:isNaN(b)&&(k=64),e=e+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(f)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(d)+ -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(g)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k);return e}var a={csvSeparator:",",csvEnclosure:'"',consoleLog:!1,displayTableName:!1,escape:!1,excelstyles:["border-bottom","border-top","border-left","border-right"],fileName:"tableExport",htmlContent:!1,ignoreColumn:[],jspdf:{orientation:"p",unit:"pt",format:"a4",margins:{left:20,right:10,top:10,bottom:10},autotable:{padding:2,lineHeight:12,fontSize:8, -tableExport:{onAfterAutotable:null,onBeforeAutotable:null,onTable:null}}},onCellData:null,outputMode:"file",tbodySelector:"tr",theadSelector:"tr",tableName:"myTableName",type:"csv",worksheetName:"xlsWorksheetName"},C=null,w=[];f.extend(!0,a,q);if("csv"==a.type||"txt"==a.type){var g="",n=0;f(this).find("thead").first().find(a.theadSelector).each(function(){g+="\n";t(this,"th,td",n,function(l,e,d){g+=H(l,e,d)+a.csvSeparator});n++;g=f.trim(g);g=f.trim(g).substring(0,g.length-1)});f(this).find("tbody").first().find(a.tbodySelector).each(function(){trData= -"";t(this,"td",n,function(l,e,d){trData+=H(l,e,d)+a.csvSeparator});trData.length>a.csvSeparator.length&&(g+="\n"+trData);n++;g=f.trim(g).substring(0,g.length-1)});g+="\n";!0===a.consoleLog&&console.log(g);if("string"===a.outputMode)return g;if("base64"===a.outputMode)return x(g);try{var v=new Blob([("csv"==a.type?"\ufeff":"")+g],{type:"text/"+("csv"==a.type?"csv":"plain")+";charset=utf-8"});saveAs(v,a.fileName+"."+a.type)}catch(O){y(a.fileName+"."+a.type,"data:text/"+("csv"==a.type?"csv":"plain")+ -";charset=utf-8,"+("csv"==a.type?"\ufeff":"")+encodeURIComponent(g))}}else if("sql"==a.type){n=0;g="INSERT INTO `"+a.tableName+"` (";f(this).find("thead").first().find(a.theadSelector).each(function(){t(this,"th,td",n,function(a,e,d){g+="'"+u(a,e,d)+"',"});n++;g=f.trim(g);g=f.trim(g).substring(0,g.length-1)});g+=") VALUES ";f(this).find("tbody").first().find(a.tbodySelector).each(function(){trData="";t(this,"td",n,function(a,e,d){trData+="'"+u(a,e,d)+"',"});3',p=p+"";f(this).find("thead").first().find(a.theadSelector).each(function(){t(this,"th,td",n,function(a,e,d){p+=""+u(a,e,d)+""});n++});var p=p+"",D=1;f(this).find("tbody").first().find(a.tbodySelector).each(function(){var a=1,e="";t(this,"td",n,function(d,h,b){e+=""+u(d,h,b)+"";a++});""!=e&&(p+=''+e+"", -D++);n++});p+="";!0===a.consoleLog&&console.log(p);if("string"==a.outputMode)return p;q=x(p);if("base64"==a.outputMode)return q;try{v=new Blob([p],{type:"application/xml;charset=utf-8"}),saveAs(v,a.fileName+".xml")}catch(R){y(a.fileName+".xml","data:application/xml;charset=utf-8;base64,"+q)}}else if("excel"==a.type||"doc"==a.type){var n=0,k="";f(this).find("thead").first().find(a.theadSelector).each(function(){k+="";t(this,"th,td",n,function(b,e,d){if(null!=b){k+=""}});n++;k+=""});D=1;f(this).find("tbody").first().find(a.tbodySelector).each(function(){k+="";t(this,"td",n,function(b,e,d){if(null!=b){k+=""}});D++;n++;k+=""});a.displayTableName&&(k+="");k+="
"+u(b,e,d)+"
"+u(b,e,d)+"
"+u(f("

"+a.tableName+"

"))+"
";!0===a.consoleLog&&console.log(k);b="";b+=''; -b=b+'';b+="";"excel"===a.type&&(b+="\x3c!--[if gte mso 9]>",b+="",b+="",b+="",b+="",b+="",b+=a.worksheetName,b+="",b+="",b+="",b+="",b+="",b+="",b+="",b+="",b+="";b+="";b+=k;b+="";b+="";if("string"==a.outputMode)return b;q=x(b);if("base64"===a.outputMode)return q;var K="excel"===a.type?"xls":"doc";try{v=new Blob([b],{type:"application/vnd.ms-"+a.type}),saveAs(v,a.fileName+"."+K)}catch(S){y(a.fileName+"."+K,"data:application/vnd.ms-"+a.type+";base64,"+q)}}else if("png"==a.type)html2canvas(f(this),{onrendered:function(b){b=b.toDataURL();b=b.substring(22);for(var e=atob(b),d=new ArrayBuffer(e.length),h=new Uint8Array(d),f=0;f< -e.length;f++)h[f]=e.charCodeAt(f);try{var g=new Blob([d],{type:"image/png"});saveAs(g,a.fileName+".png")}catch(k){y(a.fileName+".png","data:image/png;base64,"+b)}}});else if("pdf"==a.type)if(!1===a.jspdf.autotable){var v={dim:{w:F(f(this).first().get(0),"width","mm"),h:F(f(this).first().get(0),"height","mm")},pagesplit:!1},L=new jsPDF(a.jspdf.orientation,a.jspdf.unit,a.jspdf.format);L.addHTML(f(this).first(),a.jspdf.margins.left,a.jspdf.margins.top,v,function(){G(L)})}else{var m=a.jspdf.autotable.tableExport; -if("string"===typeof a.jspdf.format&&"bestfit"===a.jspdf.format.toLowerCase()){var A={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89]},E="",B="",M=0;f(this).filter(":visible").each(function(){if("none"!=f(this).css("display")){var a=F(f(this).get(0),"width","pt");if(a>M){a>A.a0[0]&&(E="a0",B="l");for(var b in A)A.hasOwnProperty(b)&&A[b][1]>a&&(E=b,B="l",A[b][0]>a&&(B="p"));M=a}}});a.jspdf.format=""==E?"a4":E;a.jspdf.orientation=""==B?"w":B}m.doc= -new jsPDF(a.jspdf.orientation,a.jspdf.unit,a.jspdf.format);f(this).filter(":visible").each(function(){if("none"!=f(this).css("display")){var b,e=0,d={};m.columns=[];m.rows=[];m.rowoptions={};if("function"===typeof m.onTable&&!1===m.onTable(f(this),a))return!0;Object.keys(a.jspdf.autotable).forEach(function(b){d[b]=a.jspdf.autotable[b]});d.margins={};f.extend(!0,d.margins,a.jspdf.margins);"function"!==typeof d.renderCell&&(d.renderCell=function(a,b,e,d,f,g,k,l){var m=l.tableExport.doc,n=0;m.setFillColor(0=== -k%2?245:255);m.setTextColor(50);m.rect(a,b,e,d,"F");b+=l.lineHeight/2+m.autoTableTextHeight()/2-2.5;"undefined"!=typeof l.tableExport.columns[f]&&(d=l.tableExport.columns[f].style.align,f=l.tableExport.rowoptions[k+1+":"+f],void 0!==f&&(d=f.style.align),"right"==d?n=e-m.getStringUnitWidth(""+g)*m.internal.getFontSize()-l.padding:"center"==d&&(n=(e-m.getStringUnitWidth(""+g)*m.internal.getFontSize())/2));nf?g+=String.fromCharCode(f):(127f?g+=String.fromCharCode(f>>6|192):(g+=String.fromCharCode(f>>12|224),g+=String.fromCharCode(f>>6&63|128)),g+=String.fromCharCode(f&63|128));for(a=g;l>2,d=(d&3)<<4|g>>4,h=(g&15)<<2|b>>6,m=b&63,isNaN(g)?h=m=64:isNaN(b)&&(m=64),e=e+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(f)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(d)+ +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(m);return e}var a={csvSeparator:",",csvEnclosure:'"',consoleLog:!1,displayTableName:!1,escape:!1,excelstyles:["border-bottom","border-top","border-left","border-right"],fileName:"tableExport",htmlContent:!1,ignoreColumn:[],jspdf:{orientation:"p",unit:"pt",format:"a4",margins:{left:20,right:10,top:10,bottom:10},autotable:{padding:2,lineHeight:12,fontSize:8, +tableExport:{onAfterAutotable:null,onBeforeAutotable:null,onTable:null}}},onCellData:null,outputMode:"file",tbodySelector:"tr",theadSelector:"tr",tableName:"myTableName",type:"csv",worksheetName:"xlsWorksheetName"},D=null,x=[];f.extend(!0,a,t);if("csv"==a.type||"txt"==a.type){var p="",n=0;f(this).find("thead").first().find(a.theadSelector).each(function(){trData="";u(this,"th,td",n,function(k,e,d){trData+=I(k,e,d)+a.csvSeparator});trData=f.trim(trData).substring(0,trData.length-1);0',q=q+"";f(this).find("thead").first().find(a.theadSelector).each(function(){u(this,"th,td",n,function(a,e,d){q+=""+v(a,e,d)+""});n++});var q=q+"",E=1;f(this).find("tbody").first().find(a.tbodySelector).each(function(){var a=1,e="";u(this,"td",n,function(d,g,b){e+=""+v(d,g,b)+ +"";a++});""!=e&&(q+=''+e+"",E++);n++});q+="";!0===a.consoleLog&&console.log(q);if("string"==a.outputMode)return q;t=y(q);if("base64"==a.outputMode)return t;try{w=new Blob([q],{type:"application/xml;charset=utf-8"}),saveAs(w,a.fileName+".xml")}catch(S){z(a.fileName+".xml","data:application/xml;charset=utf-8;base64,"+t)}}else if("excel"==a.type||"doc"==a.type){var n=0,h="";f(this).find("thead").first().find(a.theadSelector).each(function(){h+= +"";u(this,"th,td",n,function(b,e,d){if(null!=b){h+=""}});n++;h+=""});E=1;f(this).find("tbody").first().find(a.tbodySelector).each(function(){h+="";u(this,"td",n,function(b,e,d){if(null!=b){h+=""}});E++;n++;h+=""});a.displayTableName&&(h+="");h+="
"+v(b,e,d)+"
"+v(b,e,d)+"
"+v(f("

"+a.tableName+"

"))+"
";!0===a.consoleLog&&console.log(h);b="";b+='';b=b+'';b+="";"excel"===a.type&&(b+="\x3c!--[if gte mso 9]>",b+="",b+="",b+="",b+="",b+="",b+=a.worksheetName,b+="",b+="",b+="",b+="",b+="",b+="",b+="",b+= +"",b+="";b+="";b+=h;b+="";b+="";if("string"==a.outputMode)return b;t=y(b);if("base64"===a.outputMode)return t;var L="excel"===a.type?"xls":"doc";try{w=new Blob([b],{type:"application/vnd.ms-"+a.type}),saveAs(w,a.fileName+"."+L)}catch(T){z(a.fileName+"."+L,"data:application/vnd.ms-"+a.type+";base64,"+t)}}else if("png"==a.type)html2canvas(f(this),{onrendered:function(b){b=b.toDataURL();b=b.substring(22);for(var e=atob(b),d=new ArrayBuffer(e.length), +g=new Uint8Array(d),f=0;fN){a>B.a0[0]&&(F="a0",C="l");for(var b in B)B.hasOwnProperty(b)&&B[b][1]>a&&(F=b,C="l",B[b][0]>a&&(C="p"));N=a}}});a.jspdf.format=""==F?"a4":F;a.jspdf.orientation= +""==C?"w":C}l.doc=new jsPDF(a.jspdf.orientation,a.jspdf.unit,a.jspdf.format);f(this).filter(":visible").each(function(){if("none"!=f(this).css("display")){var b,e=0,d={};l.columns=[];l.rows=[];l.rowoptions={};if("function"===typeof l.onTable&&!1===l.onTable(f(this),a))return!0;Object.keys(a.jspdf.autotable).forEach(function(b){d[b]=a.jspdf.autotable[b]});d.margins={};f.extend(!0,d.margins,a.jspdf.margins);"function"!==typeof d.renderCell&&(d.renderCell=function(a,b,e,d,f,h,m,k){var l=k.tableExport.doc, +n=0;l.setFillColor(0===m%2?245:255);l.setTextColor(50);l.rect(a,b,e,d,"F");b+=k.lineHeight/2+l.autoTableTextHeight()/2-2.5;"undefined"!=typeof k.tableExport.columns[f]&&(d=k.tableExport.columns[f].style.align,f=k.tableExport.rowoptions[m+1+":"+f],void 0!==f&&(d=f.style.align),"right"==d?n=e-l.getStringUnitWidth(""+h)*l.internal.getFontSize()-k.padding:"center"==d&&(n=(e-l.getStringUnitWidth(""+h)*l.internal.getFontSize())/2));n