1. 程式人生 > >node檔案匯出excel

node檔案匯出excel

我們做後臺系統的常常會遇到檔案匯出,其實簡單的來講就是前端傳入了對應的引數(時間範圍),我們去資料庫裡查拿到資料,然後匯出excel表。
這裡我們要在node裡做匯出需要用到node自帶的幾個模組(這些模組可以用npm i 模組名稱 --dev安裝)

//在對應的server層引入
const XLSXWriter = require('xlsx-writestream');
const xlsx = require('node-xlsx');
const fs = require('fs');
const path = require('path');

首先我們先要了解下stream流的概念(也就是nodeJs裡對大檔案的操作),通俗的來講檔案過大我們不能一次性讀完或者寫完,所以就有了流,就像瓶子流水一樣,流出的水就是正在操作的內容,而瓶中的水沒有操作。
開始上程式碼

     //檔案匯出
 async DataDownload(datas) {
 	const tempDir = this.app.config.static.dir;
 	const { ctx } = this;
 	return new Promise((resolve,reject)=>{
 		//檔案匯出時的路徑
         const filepath = `${tempDir}/PRIZE_${new Date().getTime()}.xlsx`;
         console.log('^^^^^^filepath',filepath);

         const
writer = new XLSXWriter(filepath, {} /* options */); //這裡就用到了流 const wirteStream = fs.createWriteStream(filepath); writer.getReadStream().pipe(wirteStream); //迴圈傳進來的物件,excel表裡需要的欄位 for(let i=0;i<datas.length;i++){ try{ writer.addRow({ '抽獎序號'
: datas[i].id, '抽獎人': datas[i].mixnick, '專案id': datas[i].projectid, '配置ID': datas[i].configid, '抽獎時間': datas[i].drawtime, '是否中獎': datas[i].orwinning, '獎品等級': datas[i].level, '獎品名稱': datas[i].prizename, '獎品總數': datas[i].totalnum, }) }catch(e){ console.log(e) } } writer.finalize(); wirteStream.on('finish', function () { // finish console.log('############ 檔案寫完le filepath ############', filepath); let reg = new RegExp("/acs/code"); let currpath = filepath.replace(reg,""); console.log('############ 檔案寫完le currpath ############', currpath); //最後把這個檔案路徑返給前端就好了。 resolve(path.resolve(currpath)); }); }); }

自己也是為了學習,想分享給大家 ,同時也是讓自己再一次加深印象。謝謝大家!!!!!!!!!!