問題:項目框架中導出不知道有什么限制,數據稍微大點導出不了,向上面請求解決,結果一圈推下來又推回來了,所以決定自己寫,參考了網上很多大神的博客,開始試了前端導出,想着比較簡單,但是亂碼問題始終解決不了,方法也貼上來,如果有大佬會的可以指點下。
前段導出:
首先綁定導出按鈕的click事件,我查詢是一次性查詢過來的,然后數據存在全局中,調用導出方法傳入數據
然后寫導出方法:
- tableToExcel: function (dataSource) {
- console.log(dataSource);
- //列標題,逗號隔開,每一個逗號就是隔開一個單元格
- var data = "日期,城市名稱,設備,網元,告警標題,發生時間,恢復時間,恢復歷時\n";
- //增加\t為了不讓表格顯示科學計數法或者其他格式
- for(var i = 0 ; i < dataSource.length ; i++ ){
- for(var item in dataSource[i]){
- data+=method.GB2321TOUFT8(dataSource[i][item])+'\t';
- }
- data+='\n';
- };
- //data = method.GB2321TOUFT8(data);
- console.log(data);
- var blob = new Blob([data], { type: 'text/csv' }); //new way
- var csvUrl = URL.createObjectURL(blob);
- document.getElementById("mylink").href = csvUrl;
- },
導出可以導出,但是用window7自帶的excel打開就是亂碼,用記事本查看編碼是utf_8編碼,轉換成ANSI編碼就不亂碼了,查了了ANSI編碼就是GB2321編碼,找了很多轉換方法沒有轉換過來,讓客戶自己轉換編碼不實際,所以放棄,用后台導出。
后台導出:
后台導出也是要前段的a標簽配合,寫一個導出按鈕,包含a標簽
查詢按鈕改為設置a標簽href屬性為后台地址
后台路徑要保持一致,為了代碼復用方便,我封裝了這個導出方法,傳入的時候傳這么幾個參數(一個包含每行數據的集合,列頭名集合,導出表格名字,還有request和response對象)
封裝的方法,其實也不算完全封裝,有些缺陷,注意我寫的是數據查詢出來都要轉換成string類型的,我是寫死的
至此結束,瀏覽器會詢問你是否下載文件,還有導出用的是poi的SXSSFWorkbook,這是為大數據導出使用的,適合大數據量導出,還有HSSFWorkbook,但是取數據大的話容易內存泄漏,里面設置也比較多,可以研究一下,還有一種csv導出,好像性能什么更加好,這個沒有研究,有研究了再寫博客。