匯出excel表格,前端和後臺匯出
問題: 專案框架中匯出不知道有什麼限制,資料稍微大點匯出不了,向上面請求解決,結果一圈推下來又推回來了,所以決定自己寫,參考了網上很多大神的部落格,開始試了前端匯出,想著比較簡單,但是亂碼問題始終解決不了,方法也貼上來,如果有大佬會的可以指點下。
前段匯出:
首先繫結匯出按鈕的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匯出,好像效能什麼更加好,這個沒有研究,有研究了再寫部落格。