/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ /* vim: set ts=2: */ import { Component } from '@angular/core'; import * as XLSX from 'xlsx'; import { saveAs } from 'file-saver'; type AOA = Array>; @Component({ selector: 'sheetjs', template: `
{{val}}
` }) export class SheetJSComponent { data: AOA = [ [1, 2], [3, 4] ]; wopts: XLSX.WritingOptions = { bookType: 'xlsx', type: 'array' }; fileName: string = 'SheetJS.xlsx'; onFileChange(evt: any) { /* wire up file reader */ const target: DataTransfer = (evt.target); if (target.files.length !== 1) throw new Error('Cannot use multiple files'); const reader: FileReader = new FileReader(); reader.onload = (e: any) => { /* read workbook */ const bstr: string = e.target.result; const wb: XLSX.WorkBook = XLSX.read(bstr, {type: 'binary'}); /* grab first sheet */ const wsname: string = wb.SheetNames[0]; const ws: XLSX.WorkSheet = wb.Sheets[wsname]; /* save data */ this.data = (XLSX.utils.sheet_to_json(ws, {header: 1})); }; reader.readAsBinaryString(target.files[0]); } export(): void { /* generate worksheet */ const ws: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(this.data); /* generate workbook and add the worksheet */ const wb: XLSX.WorkBook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); /* save to file */ const wbout: ArrayBuffer = XLSX.write(wb, this.wopts); saveAs(new Blob([wbout], { type: 'application/octet-stream' }), this.fileName); } }