導出excel表格,前端和后台導出


問題:項目框架中導出不知道有什么限制,數據稍微大點導出不了,向上面請求解決,結果一圈推下來又推回來了,所以決定自己寫,參考了網上很多大神的博客,開始試了前端導出,想着比較簡單,但是亂碼問題始終解決不了,方法也貼上來,如果有大佬會的可以指點下。

 

前段導出:

  首先綁定導出按鈕的click事件,我查詢是一次性查詢過來的,然后數據存在全局中,調用導出方法傳入數據

  然后寫導出方法:

  1. tableToExcel: function (dataSource) {  
  2.                 console.log(dataSource);  
  3.                 //列標題,逗號隔開,每一個逗號就是隔開一個單元格  
  4.                 var data = "日期,城市名稱,設備,網元,告警標題,發生時間,恢復時間,恢復歷時\n";     
  5.                 //增加\t為了不讓表格顯示科學計數法或者其他格式        
  6.                 for(var i = 0 ; i < dataSource.length ; i++ ){          
  7.                     for(var item in dataSource[i]){              
  8.                         data+=method.GB2321TOUFT8(dataSource[i][item])+'\t';    
  9.                     }          
  10.                     data+='\n';        
  11.                 };   
  12.                 //data = method.GB2321TOUFT8(data);  
  13.                 console.log(data);  
  14.                 var blob = new Blob([data], { type: 'text/csv' }); //new way   
  15.                 var csvUrl = URL.createObjectURL(blob);   
  16.                 document.getElementById("mylink").href = csvUrl;  
  17.                   
  18.             },

導出可以導出,但是用window7自帶的excel打開就是亂碼,用記事本查看編碼是utf_8編碼,轉換成ANSI編碼就不亂碼了,查了了ANSI編碼就是GB2321編碼,找了很多轉換方法沒有轉換過來,讓客戶自己轉換編碼不實際,所以放棄,用后台導出。

 

 后台導出:

  后台導出也是要前段的a標簽配合,寫一個導出按鈕,包含a標簽

  查詢按鈕改為設置a標簽href屬性為后台地址

  后台路徑要保持一致,為了代碼復用方便,我封裝了這個導出方法,傳入的時候傳這么幾個參數(一個包含每行數據的集合,列頭名集合,導出表格名字,還有request和response對象)

  封裝的方法,其實也不算完全封裝,有些缺陷,注意我寫的是數據查詢出來都要轉換成string類型的,我是寫死的

 

   至此結束,瀏覽器會詢問你是否下載文件,還有導出用的是poi的SXSSFWorkbook,這是為大數據導出使用的,適合大數據量導出,還有HSSFWorkbook,但是取數據大的話容易內存泄漏,里面設置也比較多,可以研究一下,還有一種csv導出,好像性能什么更加好,這個沒有研究,有研究了再寫博客。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM