追风小马仔的gravatar头像
追风小马仔2016-12-31 16:53:10

关于tableExport导出excel的中文乱码的demo

最近项目中用到tableExport这个插件,遇到中文乱码的问题。查找了好多资料,并完美解决:再次贡献源码,希望更多地人受益。

把从官网下载的tableExport.js文件替换成以下的代码,即可成功!

 

(function($){
        $.fn.extend({
            tableExport: function(options) {
                var defaults = {
      separator: ',',
      ignoreColumn: [],
      tableName:'yourTableName',
      type:'csv',
      pdfFontSize:14,
      pdfLeftMargin:20,
      escape:'true',
      htmlContent:'false',
      consoleLog:'false'
    };
                 
    var options = $.extend(defaults, options);
    var el = this;
     
    if(defaults.type == 'csv' || defaults.type == 'txt'){
     
     // Header
     var tdData ="";
     $(el).find('thead').find('tr').each(function() {
     tdData += "\n";     
      $(this).filter(':visible').find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         tdData += '"' + parseString($(this)) + '"' + defaults.separator;         
        }
       }
        
      });
      tdData = $.trim(tdData);
      tdData = $.trim(tdData).substring(0, tdData.length -1);
     });
      
     // Row vs Column
     $(el).find('tbody').find('tr').each(function() {
     tdData += "\n";
      $(this).filter(':visible').find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         tdData += '"'+ parseString($(this)) + '"'+ defaults.separator;
        }
       }
      });
      //tdData = $.trim(tdData);
      tdData = $.trim(tdData).substring(0, tdData.length -1);
     });
      
     //output
     if(defaults.consoleLog == 'true'){
      console.log(tdData);
     }
     var base64data = "base64," + $.base64.encode(tdData);
     window.open('data:application/'+defaults.type+';filename=exportData;' + base64data);
    }else if(defaults.type == 'sql'){
     
     // Header
     var tdData ="INSERT INTO `"+defaults.tableName+"` (";
     $(el).find('thead').find('tr').each(function() {
      
      $(this).filter(':visible').find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         tdData += '`' + parseString($(this)) + '`,' ;         
        }
       }
        
      });
      tdData = $.trim(tdData);
      tdData = $.trim(tdData).substring(0, tdData.length -1);
     });
     tdData += ") VALUES ";
     // Row vs Column
     $(el).find('tbody').find('tr').each(function() {
     tdData += "(";
      $(this).filter(':visible').find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         tdData += '"'+ parseString($(this)) + '",';
        }
       }
      });
       
      tdData = $.trim(tdData).substring(0, tdData.length -1);
      tdData += "),";
     });
     tdData = $.trim(tdData).substring(0, tdData.length -1);
     tdData += ";";
      
     //output
     //console.log(tdData);
      
     if(defaults.consoleLog == 'true'){
      console.log(tdData);
     }
      
     var base64data = "base64," + $.base64.encode(tdData);
     window.open('data:application/sql;filename=exportData;' + base64data);
      
     
    }else if(defaults.type == 'json'){
     
     var jsonHeaderArray = [];
     $(el).find('thead').find('tr').each(function() {
      var tdData =""; 
      var jsonArrayTd = [];
      
      $(this).filter(':visible').find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         jsonArrayTd.push(parseString($(this)));         
        }
       }
      });         
      jsonHeaderArray.push(jsonArrayTd);      
       
     });
      
     var jsonArray = [];
     $(el).find('tbody').find('tr').each(function() {
      var tdData =""; 
      var jsonArrayTd = [];
      
      $(this).filter(':visible').find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){
        if(defaults.ignoreColumn.indexOf(index) == -1){
         jsonArrayTd.push(parseString($(this)));         
        }
       }
      });         
      jsonArray.push(jsonArrayTd);         
       
     });
      
     var jsonExportArray =[];
     jsonExportArray.push({header:jsonHeaderArray,data:jsonArray});
      
     //Return as JSON
     //console.log(JSON.stringify(jsonExportArray));
      
     //Return as Array
     //console.log(jsonExportArray);
     if(defaults.consoleLog == 'true'){
      console.log(JSON.stringify(jsonExportArray));
     }
     var base64data = "base64," + $.base64.encode(JSON.stringify(jsonExportArray));
     window.open('data:application/json;filename=exportData;' + base64data);
    }else if(defaults.type == 'xml'){
     
     var xml = '<?xml version="1.0" encoding="utf-8"?>';
     xml += '<tabledata><fields>';
     // Header
     $(el).find('thead').find('tr').each(function() {
      $(this).filter(':visible').find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){     
        if(defaults.ignoreColumn.indexOf(index) == -1){
         xml += "<field>" + parseString($(this)) + "</field>";
        }
       }
      });         
     });     
     xml += '</fields><data>';
      
     // Row Vs Column
     var rowCount=1;
     $(el).find('tbody').find('tr').each(function() {
      xml += '<row id="'+rowCount+'">';
      var colCount=0;
      $(this).filter(':visible').find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){ 
        if(defaults.ignoreColumn.indexOf(index) == -1){
         xml += "<column-"+colCount+">"+parseString($(this))+"</column-"+colCount+">";
        }
       }
       colCount++;
      });               
      rowCount++;
      xml += '</row>';
     });     
     xml += '</data></tabledata>'
      
     if(defaults.consoleLog == 'true'){
      console.log(xml);
     }
      
     var base64data = "base64," + $.base64.encode(xml);
     window.open('data:application/xml;filename=exportData;' + base64data);
    }else if(defaults.type == 'excel' || defaults.type == 'doc'|| defaults.type == 'powerpoint'  ){
    	
     var excel="<table>";
     // Header
     $(el).find('thead').find('tr').each(function() {
      excel += "<tr>";
      // $(this).filter(':visible')
      $(this).find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){     
        if(defaults.ignoreColumn.indexOf(index) == -1){
        	var colspan = $(this).attr('colspan');
        	if(!colspan) colspan = 1;
        	excel += "<td style='text-align: center; vertical-align: middle;' colspan='" + colspan + "'>" + parseString($(this))+ "</td>";
        }
       }
      });
      // $(this).filter(':visible')
      $(this).find('td').each(function(index,data) {
          if ($(this).css('display') != 'none'){     
           if(defaults.ignoreColumn.indexOf(index) == -1){
        	var colspan = $(this).attr('colspan');
        	var rowspan = $(this).attr('rowspan');
        	if(!colspan) colspan = 1;
        	if(!rowspan) rowspan = 1;
            excel += "<td style='text-align:center;' colspan='" + colspan + "' rowspan='" + rowspan + "'>" + parseString($(this))+ "</td>";
           }
          }
         }); 
      excel += '</tr>';      
     });     
      
      
     // Row Vs Column
     var rowCount=1;
     $(el).find('tbody').find('tr').each(function() {
      excel += "<tr>";
      var colCount=0;
      // $(this).filter(':visible')
      $(this).find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){ 
        if(defaults.ignoreColumn.indexOf(index) == -1){
        	var rowspan = $(this).attr('rowspan');
        	if(!rowspan) rowspan = 1;
         excel += "<td rowspan='" + rowspan + "' style='color:" + $(this).css('color') + "'>"+parseString($(this))+"</td>";
        }
       }
       colCount++;
      });               
      rowCount++;
      excel += '</tr>';
     });     
     excel += '</table>'
      
     if(defaults.consoleLog == 'true'){
      console.log(excel);
     }
      
     var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:"+defaults.type+"' xmlns='http://www.w3.org/TR/REC-html40'>";
     excelFile += "<head>";
     excelFile += "<!--[if gte mso 9]>";
     excelFile += "<xml>";
     excelFile += "<x:ExcelWorkbook>";
     excelFile += "<x:ExcelWorksheets>";
     excelFile += "<x:ExcelWorksheet>";
     excelFile += "<x:Name>";
     excelFile += "{worksheet}";
     excelFile += "</x:Name>";
     excelFile += "<x:WorksheetOptions>";
     excelFile += "<x:DisplayGridlines/>";
     excelFile += "</x:WorksheetOptions>";
     excelFile += "</x:ExcelWorksheet>";
     excelFile += "</x:ExcelWorksheets>";
     excelFile += "</x:ExcelWorkbook>";
     excelFile += "</xml>";
     excelFile += "<![endif]-->";
     excelFile += "</head>";
     excelFile += "<body>";
     excelFile += excel;
     excelFile += "</body>";
     excelFile += "</html>";
     var base64data = "base64," + $.base64({ data: excelFile, type: 0 });
     //window.open('data:application/vnd.ms-'+defaults.type+';filename=exportData.doc;' + base64data);
     $('<a style="display:none" href="data:application/vnd.ms-'+defaults.type+';filename=exportData.doc;'+base64data+'" download="'+defaults.tableName.toString()+'.xls"><span></span></a>').appendTo(document.body).find('span').trigger("click").parent().remove();
    }else if(defaults.type == 'png'){
     html2canvas($(el), {
      onrendered: function(canvas) {          
       var img = canvas.toDataURL("image/png");
       window.open(img);
        
        
      }
     });  
    }else if(defaults.type == 'pdf'){
  
     var doc = new jsPDF('p','pt', 'a4', true);
     doc.setFontSize(defaults.pdfFontSize);
      
     // Header
     var startColPosition=defaults.pdfLeftMargin;
     $(el).find('thead').find('tr').each(function() {
      $(this).filter(':visible').find('th').each(function(index,data) {
       if ($(this).css('display') != 'none'){     
        if(defaults.ignoreColumn.indexOf(index) == -1){
         var colPosition = startColPosition+ (index * 50);         
         doc.text(colPosition,20, parseString($(this)));
        }
       }
      });         
     });     
     
     
     // Row Vs Column
     var startRowPosition = 20; var page =1;var rowPosition=0;
     $(el).find('tbody').find('tr').each(function(index,data) {
      rowCalc = index+1;
       
     if (rowCalc % 26 == 0){
      doc.addPage();
      page++;
      startRowPosition=startRowPosition+10;
     }
     rowPosition=(startRowPosition + (rowCalc * 10)) - ((page -1) * 280);
       
      $(this).filter(':visible').find('td').each(function(index,data) {
       if ($(this).css('display') != 'none'){ 
        if(defaults.ignoreColumn.indexOf(index) == -1){
         var colPosition = startColPosition+ (index * 50);         
         doc.text(colPosition,rowPosition, parseString($(this)));
        }
       }
        
      });               
       
     });     
           
     // Output as Data URI
     doc.output('datauri');
  
    }
     
     
    function parseString(data){
     
     if(defaults.htmlContent == 'true'){
      content_data = data.html().trim();
     }else{
      content_data = data.text().trim();
     }
      
     if(defaults.escape == 'true'){
      content_data = escape(content_data);
     }
      
      
      
     return content_data;
    }
    
   }
        });
    })(jQuery);
猜你喜欢

打赏

顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友