วิธีการสร้าง excel ด้วย Node.js

ในการเขียนโปรแกรมด้าน enterprise software หรือโปรแกรมที่ใช้ในองค์กรเราคงเลี่ยงการใช้ excel ไปไม่ได้ เพราะแทบจะเป็นโปรแกรมที่ติดตัวผู้ใช้งานทั่วไป ฉนั้นถ้าเราจำเป็นที่จะต้องนำข้อมูลจากฐานข้อมูลออกมาให้อยู่ในรูปแบบ excel (ในที่นี้หมายถึง file xlsx นะครับไม่ใช้เป็น csv แล้วไปเปิดใน excel อีกที)

มาเริ่มกันที่ lib ที่จะใช้ในการทำ excel ตัวนี้ผมแนะนำ excel4node ตัวนี้มีดีตรงที่สามารถทำการ format cell ได้ด้วย โดยเริ่มต้นติดตั้ง lib ด้วยคำสั่ง npm ดังนี้

npm install excel4node --save

หลังจากติดตั้ง lib เสร็จแล้วเราก็เริ่มเขียนโปรแกรมเราด้วยการเรียกใช้ lib เราที่ด้านบนของ code (เราสามารถเรียก ตรงไหนใน code เราก็ได้แต่ขอแนะนำให้เรียกรวมไว้ที่ด้านบนเพื่อประโยชน์ในการแก้ไขในอนาคตนะครับ

var xl = require('excel4node');

ในการทำงานของ excel นั้นจะมองเป็นสองส่วนคือ workbook กับ worksheet โดยที่ใน 1 workbook สามารถมีได้หลาย worksheet ฉนั้นเราก็ต้องสร้างตัวแปรแทน workbook และสร้าง worksheet เราก่อนด้วยคำสั่ง

var wb = new xl.Workbook();
var ws = wb.addWorksheet('Sheet 1');
//เราสามารถสร้างได้หลาย worksheet โดยการใช้คำสั่ง addWorksheet

หลังจากที่เราสร้าง worksheet เสร็จแล้วเราสามารถใส่ข้อมูลเข้าไปใน worksheet ได้โดยคำสั่งดังนี้

ws.cell(1,1).number(100); 
// หมายถึงใส่ค่าตัวเลข 100 ลงไปที่ cell A1
ws.cell(1,2).string('some text'); 
//หมายถึงใส่ค่าตัวอักษร some text ลงใน cell B1
ws.cell(1,3).formula('A1+A2'); 
//หมายถึงใส่สูตร A1+A2 ใน cell C1
ws.cell(1,4).bool(true);
//หมายถึงใส่ค่า boolean true ใน cell D1

นอกจากใส่ค่าได้แล้วเรายังสามารถ format cell ให้มีความสวยงานได้ด้วยการสร้าง type style ดังนี้

var numStyle = wb.createStyle({
font: {
color: '#FF0800',
size: 12
},
numberFormat: '$#,##0.00; ($#,##0.00); -'
});

และสามารถเรียกใช้โดยเรียก method style ดังนี้

ws.cell(1,5).number(23000).style(numStyle);

เรายังสามารถใส่ค่า style เข้าไปได้เลยโดยที่ไม่ต้องประกาศค่าก่อนก็ได้ (แนะนำให้ใช้ในกรณีที่ใช้ style นี้เพียงครั้งเดียว ในกรณีที่มีใช้มากกว่า 1 ครั้ง แนะนำให้สร้างเป็น type style ผ่านคำสั่ง createStyle ก่อน)

ws.cell(1,6).string('my big string').style({font:{ size : 25 }});

สามารถใช้ style ซ้อนกันได้หลายๆ style ดังนี้

ws.cell(1,7).number(45900).style(numStyle).style({font:{ size : 25 }});

หลังจากเราได้ทำการใส่ข้อมูลไปจนครบทุก cell ตาม logic โปรแกรมเราแล้วก็ใช้คำสั่ง write เพื่อบันทึก file เก็บไว้ด้วยคำ write ดังนี้

wb.write('myfirstexcel.xlsx'); 

ในกรณีที่ต้องการ write ออกไปที่ browser ให้ใช้คำสั่งดังนี้

app.get('/', function (req, res) {
wb.write('ExcelFile.xlsx', res);
});

สำหรับท่านใดที่ต้องการศึกษาการใช้งานเพิ่มเติมสามารถหาข้อมูลเพิ่มได้จาก link นี้นะครับ