在之前的文章中,咱们为大家别离具体介绍了在JavaScript、React中应用SpreadJS导入和导出Excel文件的办法,作为带给宽广前端开发者的“三部曲”,本文咱们将为大家介绍该问题在Angular中的实现。
Excel 电子表格自 1980 年代以来始终为各行业所宽泛应用,至今已领有超过3亿用户,大多数人都相熟 Excel 电子表格体验。许多企业在其业务的各个环节中应用了 Excel 电子表格进行估算和布局。
通常状况下,刚开始时咱们的业务流程中的数据简略,也不波及简单的格局和数据关系。但随着组织的倒退,可能很难不开始依赖 Excel 的性能。
在你的应用程序中装置 SpreadJS 组件
残缺的Demo请点击此处下载:
https://gcdn.grapecity.com.cn...
应该留神的是,因为咱们应用的是 Angular CLI,咱们须要确保它与 NPM 一起装置:
npm install -g @angular/cli
因为咱们将应用 SpreadJS 的 Excel 导入和导出性能,因而咱们须要 ExcelIO 组件。你能够应用 NPM 装置它和根本的 SpreadJS 文件:
npm install @grapecity/spread-sheets @grapecity/spread-excelio @grapecity/spread-sheets-angular
实例化 SpreadJS 组件
SpreadJS 能够增加到 app.component.html 页面,如下所示:
<gc-spread-sheets [backColor]=”spreadBackColor” [hostStyle]="hostStyle" (workbookInitialized)="workbookInit($event)"></gc-spread-sheets>
实例化 SpreadJS 组件并在 app.component.ts 文件中创立 ExcelIO 类的对象,代码如下:
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css']})export class AppComponent { spreadBackColor = 'aliceblue'; hostStyle = { width: '95vw', height: '80vh' }; private spread; private excelIO; constructor() { this.spread = new GC.Spread.Sheets.Workbook(); this.excelIO = new Excel.IO(); } workbookInit(args: any) { const self = this; self.spread = args.spread; const sheet = self.spread.getActiveSheet(); sheet.getCell(0, 0).text('Test Excel').foreColor('blue'); sheet.getCell(1, 0).text('Test Excel').foreColor('blue'); sheet.getCell(2, 0).text('Test Excel').foreColor('blue'); sheet.getCell(3, 0).text('Test Excel').foreColor('blue'); sheet.getCell(0, 1).text('Test Excel').foreColor('blue'); sheet.getCell(1, 1).text('Test Excel').foreColor('blue'); sheet.getCell(2, 1).text('Test Excel').foreColor('blue'); sheet.getCell(3, 1).text('Test Excel').foreColor('blue'); sheet.getCell(0, 2).text('Test Excel').foreColor('blue'); sheet.getCell(1, 2).text('Test Excel').foreColor('blue'); sheet.getCell(2, 2).text('Test Excel').foreColor('blue'); sheet.getCell(3, 2).text('Test Excel').foreColor('blue'); sheet.getCell(0, 3).text('Test Excel').foreColor('blue'); sheet.getCell(1, 3).text('Test Excel').foreColor('blue'); sheet.getCell(2, 3).text('Test Excel').foreColor('blue'); sheet.getCell(3, 3).text('Test Excel').foreColor('blue'); }
创立一个承受 XLSX 文件的输出元素
对于导入,咱们将创立一个承受 XLSX 文件的输出元素。让咱们在 app.component.html 中增加以下代码:
<div class='loadExcelInput'> <p>Open Excel File</p> <input type="file" name="files[]" multiple id="jsonFile" accept=".xlsx" (change)="onFileChange($event)" /></div>
增加导入代码
ExcelIO 对象关上所选文件并以 JSON 格局返回后果。这个 JSON 数据能够被 SpreadJS 间接了解,所以咱们将在 onFileChange() 函数中为 change 事件编写导入代码,如下所示:
onFileChange(args: any) { const self = this, file = args.srcElement && args.srcElement.files && args.srcElement.files[0]; if (self.spread && file) { self.excelIO.open(file, (json: any) => { self.spread.fromJSON(json, {}); setTimeout(() => { alert('load successfully'); }, 0); }, (error: any) => { alert('load fail'); }); }}
增加导出代码
同样,让咱们增加一个按钮来解决导出性能。要增加导出按钮,咱们能够应用:
<div class='exportExcel'> <p>Save Excel File</p> <button (click)="onClickMe($event)">Save Excel!</button></div>
咱们还须要解决这个按钮的点击事件并在那里编写咱们的代码。 SpreadJS 将数据保留为 JSON,ExcelIO 能够应用 JSON 将其保留为 BLOB。稍后,须要将此 blob 数据传递给文件爱护程序组件的 saveAs() 函数:
onClickMe(args: any) { const self = this; const filename = 'exportExcel.xlsx'; const json = JSON.stringify(self.spread.toJSON()); self.excelIO.save(json, function (blob) { saveAs(blob, filename); }, function (error: any) { console.log(error); });}
应该留神的是,咱们应用了文件爱护程序组件来实现导出性能。要在你的我的项目中蕴含文件爱护程序,请依照以下步骤操作:
- 运行“npm install file-saver –save”命令
- 运行“npm install @types/file-saver –save-dev”命令
- 将此第三方库增加到“.angular.json”
"scripts": ["./node_modules/file-saver/FileSaver.js"]** 导入组件
import {saveAs} from 'file-saver';
当初曾经能够在 Angular 中应用 SpreadJS 胜利导入和导出 Excel 文件了。
更多纯前端表格在线demo示例 :https://demo.grapecity.com.cn...
纯前端表格利用场景:https://www.grapecity.com.cn/...
挪动端示例(可扫码体验):http://demo.grapecity.com.cn/...