Skip to main content

How To Export Excel With Angular

สวัสดีครับ วันนี้เราจะมาแนะนำการ 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 ดังภาพครับ


Deprecated: Function create_function() is deprecated in /home/service1/domains/monkeywebstudio.com/public_html/wp-content/plugins/simple-lightbox/controller.php on line 1642