# Node.js Excel,Zip,Email 開局大禮包 今天的開局大禮包,送給大家的是如何用node.js編輯excel,並壓縮成zip檔,可由email寄送出去。 const fs = require('fs') const path = require('path') // 基本盤fs and path const sgMail = require('@sendgrid/mail') // 大禮包三主角 const ExcelJS = require('exceljs') const ZipAFolder = require('zip-a-folder') 由於最後要寄送email,但email無法直接寄送資料夾,所以我們要先創建一個資料夾在專案資料夾中,加入壓縮變成zip檔後再寄送。 創建名為excelFolder的資料夾 if(!fs.existsSync(`${__dirname}/excelFolder/`))可用拿判斷資料夾是否已經存在 再使用fs.mkdir(path.join(`${__dirname}/`, 'excelFolder'),創建資料夾。 if(!fs.existsSync(`${__dirname}/excelFolder/`)) { fs.mkdir(path.join(`${__dirname}/`, 'excelFolder'), (err) => { if (err) { return console.error(err) } }) } 創建excel const workbook = new ExcelJS.Workbook() const worksheet = workbook.addWorksheet('My Sheet') // 只使用最基本的功能,其它請參閱github worksheet.columns = [ // excel的header { header: "年", key: "year", width: 10 }, { header: "月", key: "month", width: 10 }, { header: "日", key: "day", width: 10 } } worksheet.addRow({ //data 會對應worksheet.columns的key填入 year: '2021', month: '11', day: '26', }) 會得到如下圖的結果 ![](https://i.imgur.com/0STDGGI.jpg) 將此excel存到剛剛創建的excelFolder資料夾中 workbook.xlsx.writeFile(`${__dirname}/excelFolder/excel.xlsx`) // 可在excelFolder找到創建的excel.xlsx 將excelFolder資料夾壓縮成excelFolder.zip await ZipAFolder.zip(`${__dirname}/excelFolder`, `${__dirname}/excelFolder.zip`) 最後寄送email,需要把email附件轉成base64格式,使用 fs.readFileSync('path').toString("base64") 將生成的base64放到sgMail物件裡的attachments的content,type設定為"application/zip" const pathToAttachment = `${__dirname}/excelFolder.zip` const attachment = fs.readFileSync(pathToAttachment).toString("base64") // 轉成base64 await sgMail.send({ to: 'aaa@mail', from: { email: '寄件者mail', name: '寄件者名稱' }, bcc: ['cc@mail'], subject: `主旨`, text: '內文', attachments: [ { content: attachment, filename: `excelFolder.zip`, type: "application/zip", disposition: "attachment" } ] }).catch(err => context.log(err)) 將三大禮包整合處理後,就完成今天的任務了!