使用RDP报表,客服说导出下个版本出?那就自己玩呗

267 阅读1分钟

在使用rdp报表时,发现可输入的报表不支持导出,问了下客服说下个版本出。(保持微笑)

还是自己动手,丰衣足食。

下面是干货

html:

<span class="exportReport" lay-filter="exportReport" id="exportReport" >
    < a href="" id="dlink" style="display: none;"></ a><i class="layui-icon layui-icon-export"></i>导出
</span>

js:

由于是iframe内嵌页面所以麻烦了一点点

// 导出功能
getExport:function () {    
    $('#exportReport').click(function () {    
          // 导出报表名称        
          var fname = $('#currentFrame').contents().find('body #prefrm').contents().find('body .dynamic thead tr:nth-child(1) td').text();     
         //导出方法调用,动态传参其后缀可更改。       
         exportExcel('currentFrame','',fname+'.xls');    
    })
;}

由于这个导出方法有点长以及项目需要用的地方较多我把他封装成了一个公共js直接调用就好 下面看详细代码:

var idTmr;
//浏览器兼容
function  getExplorer() {   
 var explorer = window.navigator.userAgent ;  
  //ie   
 if (explorer.indexOf("MSIE") >= 0) {        return 'ie';    }   
 //firefox  
  else if (explorer.indexOf("Firefox") >= 0) {        return 'Firefox';    }   
//Chrome   
 else if(explorer.indexOf("Chrome") >= 0){        return 'Chrome';    }  
  //Opera    
else if(explorer.indexOf("Opera") >= 0){        return 'Opera';    }    
//Safari   
 else if(explorer.indexOf("Safari") >= 0){        return 'Safari';    }
};
function exportExcel(iframeid,name,filename) {  
  //由于rdp生成的table无id,所以加一个  
  $('#'+iframeid).contents().find('body #prefrm').contents().find('body .dynamic').attr('id','dynamic');   
  var tableid = 'dynamic';    
 if(getExplorer()=='ie')    {    
   var curTbl = document.getElementById(tableid);      
   var oXL = new ActiveXObject("Excel.Application");
   var oWB = oXL.Workbooks.Add();        
   var xlsheet = oWB.Worksheets(1);      
   var sel = document.body.createTextRange();        
   sel.moveToElementText(curTbl);       
   sel.select();       
   sel.execCommand("Copy");      
   xlsheet.Paste();      
   oXL.Visible = true;       
  try {           
      var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");  
  } catch (e) { 
      print("Nested catch caught " + e);  
  } finally {          
      oWB.SaveAs(fname);     
      oWB.Close(savechanges = false);       
      oXL.Quit();         
      oXL = null;           
      idTmr = window.setInterval("Cleanup();", 1);  
  }    
 }    else    {  
      tableToExcel(tableid,name,filename)  
 }
};

function Cleanup() {   
 window.clearInterval(idTmr);   
 CollectGarbage();
};
var tableToExcel = (function() {    
    var uri = 'data:application/vnd.ms-excel;base64,',     
   //Excel样式代码       
   template = '<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>'+
            ' <style type="text/css">'+
            '.excelTable  {'+
            'border-collapse:collapse;'+
            ' border:thin solid #999; '+
            '}'+
            '   .excelTable  th {'+
            '   border: thin solid #999;'+ 
           '  padding:20px;'+
            '  text-align: center;'+ 
           '  border-top: thin solid #999;'+
            ' background-color: #E6E6E6;'+
            ' }'+ 
           ' .excelTable  td{'+ 
           ' border:thin solid #999;'+ 
           '  padding:2px 5px;'+
            '  text-align: center;'+ 
           ' }</style>'+
            '</head><body ><table class="excelTable">{table}</table></body></html>',       
   base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },   
   format = function(s, c) {  
          return s.replace(/{(\w+)}/g,        
     function(m, p) { return c[p]; }) }  
      return function(table, name,filename) { 
       if (!table.nodeType) table =  $('#currentFrame').contents().find('body #prefrm').contents().find('body #dynamic');   
     // 复制表格      
      var tableBackups = table.clone();    
      var tds = tableBackups.find('thead tr td');   
     for(var i = 0;i<tds.length;i++){      
        if(tds.eq(i).children().length==1){     
           tds.eq(i).text(tds.eq(i).find("input[type='text']").val());    
            tds.eq(i).find("input[type='text']").remove();     
        }     
     }        
    var ctx = {worksheet: name || 'Worksheet', table: tableBackups[0].innerHTML} 
    document.getElementById("dlink").href = uri + base64(format(template, ctx));    
    document.getElementById("dlink").download = filename;   
    document.getElementById("dlink").click();  
  }
})();