当前位置: 首页 > news >正文

前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件

在之前的文章中,我们为大家分别详细介绍了在JavaScript、React中使用SpreadJS导入和导出Excel文件的方法,作为带给广大前端开发者的“三部曲”,本文我们将为大家介绍该问题在Angular中的实现。
Excel 电子表格自 1980 年代以来一直为各行业所广泛使用,至今已拥有超过3亿用户,大多数人都熟悉 Excel 电子表格体验。许多企业在其业务的各个环节中使用了 Excel 电子表格进行预算和规划。
通常情况下,刚开始时我们的业务流程中的数据简单,也不涉及复杂的格式和数据关系。但随着组织的发展,可能很难不开始依赖 Excel 的功能。

在你的应用程序中安装 SpreadJS 组件

完整的Demo请点击此处下载:
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjM0MDU3fDk2NDQyNTkyfDE2NjM5MjI3NjF8NjI2NzZ8OTk3MTg%3D

应该注意的是,由于我们使用的是 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);
  });
}

应该注意的是,我们使用了文件保护程序组件来实现导出功能。要在你的项目中包含文件保护程序,请按照以下步骤操作:

  1. 运行“npm install file-saver –save”命令
  2. 运行“npm install @types/file-saver –save-dev”命令
  3. 将此第三方库添加到“.angular.json”
    “scripts”: [“./node_modules/file-saver/FileSaver.js”]**
  4. 导入组件
import {saveAs} from 'file-saver'; 

现在已经可以在 Angular 中使用 SpreadJS 成功导入和导出 Excel 文件了。

更多纯前端表格在线demo示例 :https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html
纯前端表格应用场景:https://www.grapecity.com.cn/developer/spreadjs#scenarios
移动端示例(可扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesample/

相关文章:

  • 【重识云原生】第六章容器6.3.7节——命令行工具kubectl
  • 求100到200的素数
  • Java面试宝典pdf整理
  • Python中的递归可选依赖
  • 前端Fetch API接收数据
  • 公众号网课接口系统
  • 数据库概述03(jdbc连接)
  • CSS基础知识---扫盲必备~~~
  • 大学网课搜题公众号制作
  • [Codeforces] probabilities (R1600) Part.1
  • 笔试强训(十)
  • 这个 MySQL 问题困扰了我一个月,现在终于把他解决了
  • SOD酶活性测定丨Abbkine超氧化物歧化酶(SOD)活性检测试剂盒
  • 参数解释安捷伦86142B光学分析仪
  • 利用回调函数在driver中收集覆盖率
  • Electron入门介绍
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS函数式编程 数组部分风格 ES6版
  • rabbitmq延迟消息示例
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 从伪并行的 Python 多线程说起
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何进阶一名有竞争力的程序员?
  • 我感觉这是史上最牛的防sql注入方法类
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​configparser --- 配置文件解析器​
  • ​HTTP与HTTPS:网络通信的安全卫士
  • !$boo在php中什么意思,php前戏
  • #define与typedef区别
  • $(function(){})与(function($){....})(jQuery)的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (初研) Sentence-embedding fine-tune notebook
  • (十一)手动添加用户和文件的特殊权限
  • (一)u-boot-nand.bin的下载
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)iOS字体
  • (转)拼包函数及网络封包的异常处理(含代码)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .gitattributes 文件
  • .Mobi域名介绍
  • .NET NPOI导出Excel详解
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .php文件都打不开,打不开php文件怎么办
  • .py文件应该怎样打开?
  • //解决validator验证插件多个name相同只验证第一的问题
  • /bin/rm: 参数列表过长"的解决办法
  • /etc/fstab和/etc/mtab的区别
  • @Bean有哪些属性
  • @DateTimeFormat 和 @JsonFormat 注解详解