使用XLSX和FileSaver昧谊,純前端實現(xiàn)導(dǎo)出大批量數(shù)據(jù),并生成excel

因為項目中涉及到excel導(dǎo)出酗捌,以前的開發(fā)方式是請求接口呢诬,后端返回一個流,前端把流轉(zhuǎn)化為excel胖缤,并下載馅巷,現(xiàn)在不是這套流程,是純前端自己做的草姻,實現(xiàn)的思路是,假如一共有500條數(shù)據(jù)稍刀,每次請求50次撩独,一共請求10次,第10次請求結(jié)束后账月,生成excel综膀,并導(dǎo)出(前端所用框架是vue,寫法是按照vue的寫法實現(xiàn)的),加上promise去實現(xiàn)局齿。

1.安裝插件

npm install?XLSX

npm install?FileSaver

因為多個頁面都會用到導(dǎo)出excel功能剧劝,所以把封裝一下方法,實現(xiàn)復(fù)用

import?XLSX?from?"xlsx";

import?FileSaver?from?'file-saver'

export?function?excelData?(id,name)?{

??let?xlsxParam?=?{?raw:?true?}?

??let?wb?=?XLSX.utils.table_to_book(document.querySelector(`#${id}`),?xlsxParam)

??/*?get?binary?string?as?output?*/

??let?wbout?=?XLSX.write(wb,?{?bookType:?'xlsx',?bookSST:?true,?type:?'array'?})

??try?{

????FileSaver.saveAs(new?Blob([wbout],?{?type:?'application/octet-stream'?}),?`${name}.xlsx`)

??}?catch?(e)?{

????if?(typeof?console?!==?'undefined')?{

??????console.log(e,?wbout)

????}

??}

??return?wbout

}

在組件中使用

import?{?excelData?}?from?"@/excel.js"

在template里

<el-button?type="primary"? @click="exportData"?size="small">導(dǎo)出數(shù)據(jù)</el-button>

<el-table

??????:data="tableDataAll"

??????id="exportId"

??????style="display:none;"

????>

? ? ...省去表格的內(nèi)容

</el-table>

data里定義數(shù)據(jù)

tableDataAll :[],//表格數(shù)據(jù)

tableDateTotal :[],//表格數(shù)據(jù)總條數(shù)

queryData :{? //查詢條件

? ? page:1,

? ? size:10

}

這里面el-table不展示在頁面抓歼,只作為導(dǎo)出excel使用讥此,具體可以網(wǎng)上查看FileSaver這個的具體實現(xiàn)

?exportData(){

? ??this.tableDataAll?=?[];

? ? ? let p?=?new?Promise((resolve,?reject)=>?{

????????resolve();

??????});

? ? //這個是獲取一共有多少條,每次請求50條數(shù)據(jù)谣妻,一共請求多少次

? ? let?{?tableDateTotal?}?=?this.$data;

??????let?num?=?1;

??????if?(tableDateTotal?%?50?==?0)?{

????????num?=?parseInt(tableDateTotal?/?50)

??????}else{

????????num?=?parseInt(tableDateTotal?/?50)?+?1;

??????}

??????for?(let?i?=?1;?i?<=?num;?i++)?{

? ? ? ? //i是每次請求的第幾頁

?????????p?=?p.then(this.get_request_sth_func(i));

??????}

??????p.then(()=>?{

? ? ? ? ?//第一個參數(shù)萄喳,通過id去找到表格,相當去把table內(nèi)容挪到excel里蹋半,第二個參數(shù)表示導(dǎo)出后excel的名稱

?????????excelData("exportId","課程觀看數(shù)據(jù)")

????????setTimeout(()=>{

? ? ? ? ? ? //導(dǎo)出完excel后清空這個表格他巨,避免頁面dom結(jié)構(gòu)過大,畢竟也是幾百條减江,幾千條數(shù)據(jù)呢染突,換算成dom不少呢

????????????this.tableDataAll=[];

????????},200)

??????});

}??

get_request_sth_func(i)?{

??????return?()?=>?{

????????return?new?Promise((resolve,?reject)?=>?{

??????????let?{?queryData?}?=?this.$data;

??????????queryData.page?=?i;

??????????delete?queryData.size;

??????????this.$axios.get("接口請求地址",?{?...queryData,?size:?50?}).then(res?=>?{

????????????this.tableDataAll.push(...res.list);

????????????resolve();

??????????});

????????});

??????};

????},

注意一下,XLSX和FileSaver導(dǎo)出原理辈灼,是把頁面上的table轉(zhuǎn)成excel的份企,所以這個重點就是利用promise實現(xiàn)把所有的數(shù)據(jù)下完成后在頁面渲染成完整的table,再去實現(xiàn)導(dǎo)出茵休。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薪棒,一起剝皮案震驚了整個濱河市手蝎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俐芯,老刑警劉巖棵介,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吧史,居然都是意外死亡邮辽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門贸营,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨述,“玉大人,你說我怎么就攤上這事钞脂〈г疲” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵冰啃,是天一觀的道長邓夕。 經(jīng)常有香客問我,道長阎毅,這世上最難降的妖魔是什么焚刚? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮扇调,結(jié)果婚禮上矿咕,老公的妹妹穿的比我還像新娘。我一直安慰自己狼钮,他們只是感情好碳柱,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熬芜,像睡著了一般士聪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猛蔽,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天剥悟,我揣著相機與錄音,去河邊找鬼曼库。 笑死区岗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的毁枯。 我是一名探鬼主播慈缔,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼种玛!你這毒婦竟也來了藐鹤?” 一聲冷哼從身側(cè)響起瓤檐,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娱节,沒想到半個月后挠蛉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肄满,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年谴古,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠歉。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡掰担,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怒炸,到底是詐尸還是另有隱情带饱,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布阅羹,位于F島的核電站纠炮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灯蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一孝宗、第九天 我趴在偏房一處隱蔽的房頂上張望穷躁。 院中可真熱鬧,春花似錦因妇、人聲如沸问潭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡忙。三九已至,卻和暖如春址芯,著一層夾襖步出監(jiān)牢的瞬間灾茁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工谷炸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留北专,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓旬陡,卻偏偏與公主長得像拓颓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子描孟,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容