NodeJs+Vue+MongoDB後臺管理系統模板(5)數據生成Excel並導出

將數據生成Excel並導出是後臺管理系統常備的功能,但是之前還沒有嘗試過通過NodeJs去實現,這一次在網上去搜索了具體的實現方法,從中瞭解到了一個node-xlsx的node模塊,在npm的官網上了解了相關的使用方法。

const xlsx = require('node-xlsx');

在具體操作的時候,生成excel時需要的數據是數組值類型數組,[[1,2,3],[1,2,3],[1,2,3],[1,2,3]],應該可以看懂什麼意思,這樣的數據生成的是四行每行三列,數據爲每行都是1,2,3的文件,在這之前需要先在數組裏添加一個標題的數組,然後遍歷查詢的數據進行追加,可以通過options來定義列寬,但再設置其他的樣式,就需要引入一個全新的庫了,通過xlsx.的buide方法進行數據的轉換,最後再調用fswriteFile方法去生成文件,最後返回數據的時候只需要返回文件所在的位置即可。

//下載所有用戶信息
router.get('/download',(req,res)=>{
    DB.find('user',{},(err,user)=>{
        if(err){
            res.send({
                code : 0 ,
                msg : '下載失敗'
            });
        }
        const DATA = [['用戶名','用戶密碼','年齡','性別','生日',
                        '頭像地址','家鄉','手機號','QQ']];
        user.forEach((node)=>{
            const Arr = [
                node.UserName, node.PassWorld, node.Age,
                node.Gender==='male'?'男':'女', node.Birthday, node.Picture,
                node.Hometown, node.Phone, node.QQ
            ];
            DATA.push(Arr)
        });
        const options = {'!cols': [{wch:11},{wch:14},{wch:8},{wch:6},{wch:13},
                        {wch:50},{wch:16},{wch:15},{wch:13}]};
        const buffer = xlsx.build([{name: "所有用戶信息表", data: DATA}],options);
        fs.writeFile('./public/download/user.xlsx',buffer,(err)=>{
            if(err){
                res.send({
                    code : 0 ,
                    msg : '下載失敗'
                });
            }
            res.send({
                code:1,
                file: 'http://' + req.headers.host + '/download/user.xlsx'
            })
        });
    })
});

在前臺的處理更是簡單方便,直接跳轉文件地址就可以完成下載

const result = await reqUserDownload();
if(result.code === 1){
    window.location.href = result.file;
}

我這次的做法比較粗糙,因爲是導出的所有用戶的數據,其實通過傳遞每頁的數據量數和當前頁數,就可以打印當前頁的數據,或者打印指定條數的數據,僅供參考。

最後想要完整代碼的,歡迎訪問我的GitHub,最好來個Star,哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章