สวัสดีครับ วันนี้เราจะมาแนะนำการ Export ข้อมูลเป็นไฟล์ Excel ด้วย Angular กันครับ
ก่อนอื่น เรามาสร้าง Project Angular กันก่อนดีกว่าครับ
สำหรับการติดตั้ง Angular จะต้องมีการติดตั้ง Angular cli ก่อนครับ หากใครติดตั้งแล้วข้ามไปได้ครับ
npm install -g @angular/cli
สร้าง Project ใหม่ที่มีชื่อว่า excel
ng new excel
สำหรับใครที่ยังไม่เคยติดตั้ง ตอนสร้าง Project จะมีถามอยู่ 2 – 3 ขั้นตอน ตอบ y และ เลือก css ดังภาพ
เลือก css แล้วกด enter
จากนั้น รอติดตั้ง สักครู่
เมื่อติดตั้งเสร็จแล้ว เราจะมาติดตั้ง Libary เพิ่มเติมอีกดังนี้ครับ
npm i xlsx
npm i file-saver
เมื่อติดตั้งเรียบร้อยแล้ว ng serve เพื่อรัน Angular ได้เลยครับ
ในส่วนต่อมาเรามาเขียน Code ใน angular เพื่อ Export Excel กันครับ
ไฟล์ D:/angular/excel/src/app/app.component.ts
import { Component} from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent{
title = 'excel';
data: any = [{
code: "EMP1001",
name: "USER1",
age: 18,
address: "Bangkok"
}, {
code: "EMP1002",
name: "USER2",
age: 18,
address: "Bangkok"
}, {
code: "EMP1003",
name: "USER3",
age: 18,
address: "Bangkok"
}, {
code: "EMP1004",
name: "USER4",
age: 18,
address: "Bangkok"
}];
constructor() { }
downloadExcel(){
let header = [{
A: "รหัส",
B: "ชื่อสกุล",
C: "อายุ",
D: "ที่อยู่"
}];
this.exportAsExcelFile(this.data,header, 'excel');
}
public exportAsExcelFile(json: any[],headerText:any[],excelFileName: string): void {
var worksheet = XLSX.utils.json_to_sheet(headerText, {header: [], skipHeader: true});
XLSX.utils.sheet_add_json(worksheet, json, {skipHeader: true, origin: "A2"});
const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
this.saveAsExcelFile(excelBuffer, excelFileName);
}
private saveAsExcelFile(buffer: any, fileName: string): void {
const data: Blob = new Blob([buffer], {
type: EXCEL_TYPE
});
FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);
}
}
ในตัวอย่างนี้จะแก้ไขที่ไฟล์ app.component เลยครับ สำหรับใครที่ต้องการประยุกต์ใช้งานกับส่วนอื่น ๆ อาจนำ Code การ Export Excel สร้างเป็น Service ไว้เพื่อให้ Component อื่น ๆ เรียกใช้งานได้ง่ายครับ
แก้ไขไฟล์ D:/anguolar/excel/src/app/app.component.css
table, th, td{
border-top:1px solid #000;
border-bottom:1px solid #000;
border-right: 1px solid #000;
text-align: center;
}
table{
border-collapse:collapse;
width:100%;
}
th, td{
text-align:left;
padding:10px;
text-align: center;
}
a{
text-decoration:none;
color:white;
background:#555;
padding:10px;
border-radius:10px;
font-size:20px;
}
เพิ่ม css การแสดงผลตาราง
แก้ไขไฟล์ D:/angular/excel/src/app/app.component.html
<div class="content" role="main">
<table>
<thead>
<tr>
<th>รหัส</th>
<th>ชื่อ</th>
<th>อายุ</th>
<th>ที่อยู่</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let r of data">
<td>{{ r.code }}</td>
<td>{{ r.name }}</td>
<td>{{ r.age }}</td>
<td>{{ r.address }}</td>
</tr>
</tbody>
</table>
<p>
<a href="#" (click)="downloadExcel()" style="">Export Excel</a>
</p>
</div>
ในส่วนของการแสดงผล จะมีการแสดงข้อมูลในตาราง และมีปุ่มคลิก Export Excel เรียกฟังชั่น downloadExcel() เพื่อทำการ Export Excel ต่อไป
ตัวอย่างการทำงาน URL http://localhost:4200
หากไม่มีอะไรผิดพลาด เมื่อคลิกปุ่ม Export Excel จะได้ไฟล์ .xlsx ดังภาพครับ