<!DOCTYPE html>
<html>
<head>
<title>angular playground</title>
<link rel="stylesheet" href="style.css" />
<script src="src/main.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/exceljs/1.5.1/exceljs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script>
</head>
<body>
<my-app>
loading...
</my-app>
</body>
</html>
/* Styles go here */
### Angular Starter Plunker - Typescript
// Shim the environment
import 'core-js/client/shim';
// Angular requires Zones to be pre-configured in the environment
import 'zone.js';
import 'zone.js/dist/long-stack-trace-zone';
//main entry point
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.js';
platformBrowserDynamic().bootstrapModule(AppModule);
//our root app component
import { Component, NgModule, VERSION } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import * as Excel from "exceljs/dist/exceljs.min.js";
import * as ExcelProper from "ExcelJS";
import * as FileSaver from 'file-saver';
@Component({
selector: 'my-app',
template: `
<div>
<h2>Excel Export Dashboard</h2>
<button (click)="exportToExcel()">Export</button>
<table border="1">
<thead>
<tr>
<th>Column1</th>
<th>Column2</th>
<th>Column3</th>
<th>Column4</th>
<th>Column5</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let x of data">
<td>{{x.col1}}</td>
<td>{{x.col2}}</td>
<td>{{x.col3}}</td>
<td>{{x.col4}}</td>
<td>{{x.col5}}</td>
</tr>
</tbody>
</table>
</div>
`,
})
export class App {
name: string;
sName:string;
excelFileName:string;
//blobType: string = "text/plain;charset=utf-8";
blobType: string = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
cols =['Column1','Column2','Column3','Column4','Column5']
data=[{col1:"a1",col2:"b1",col3:"c1",col4:"d1",col5:"e1"},
{col1:"a2",col2:"b2",col3:"c2",col4:"d2",col5:"e2"},
{col1:"a3",col2:"b3",col3:"c3",col4:"d3",col5:"e3"},
{col1:"a4",col2:"b4",col3:"c4",col4:"d4",col5:"e4"},
{col1:"a5",col2:"b5",col3:"c5",col4:"d5",col5:"e5"}
]
constructor() {
this.sName = 'SheetTest';
this.excelFileName = 'TestExcelExport.xlsx';
}
exportToExcel()
{
var workbook = new Excel.Workbook();
workbook.creator = 'Web';
workbook.lastModifiedBy ='Web';
workbook.created = new Date();
workbook.modified = new Date();
workbook.addWorksheet(this.sName, { views: [{ state: 'frozen', ySplit: 3, xSplit: 2, activeCell: 'A1', showGridLines: false }] })
var sheet = workbook.getWorksheet(1);
var head1 = ["Exported Data"];
sheet.addRow(head1);
sheet.addRow("");
sheet.getRow(3).values = this.cols;
sheet.columns = [
{ key: 'col1' },
{ key: 'col2' },
{ key: 'col3' },
{ key: 'col4' },
{ key: 'col5' }
];
sheet.addRows(this.data);
workbook.xlsx.writeBuffer().then(data => {
var blob = new Blob([data], { type: this.blobType });
var url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = url;
a.download = this.excelFileName;
a.click();
//adding some delay in removing the dynamically created link solves the problem in FireFox
//setTimeout(function() {window.URL.revokeObjectURL(url);},0);
//FileSaver.saveAs(blob, this.excelFileName, true);
});
}
}
@NgModule({
imports: [BrowserModule],
declarations: [App],
bootstrap: [App],
})
export class AppModule {
}
{
"name": "@plnkr/starter-angular",
"version": "1.0.0",
"description": "Angular starter template",
"dependencies": {
"@angular/common": "^5.2.4",
"@angular/compiler": "^5.2.4",
"@angular/core": "^5.2.4",
"@angular/platform-browser": "^5.2.4",
"@angular/platform-browser-dynamic": "^5.2.4",
"core-js": "^2.5.3",
"rxjs": "^5.5.6",
"zone.js": "^0.8.20",
"exceljs": "^1.5.1",
"file-saver": "^1.3.8"
},
"plnkr": {
"runtime": "system"
}
}