[Angular] Export excel from table or json

这篇具有很好参考价值的文章主要介绍了[Angular] Export excel from table or json。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

How to implement?

1.NPM packages installation

npm i xlsx
npm i file-saver
npm i @types/file-saver

2.Create a service called ExportExcel (export-excel.service.ts)

import { Injectable } from '@angular/core';

import * as fileSaver from 'file-saver';
import * as XLSX from 'xlsx';

@Injectable({
  providedIn: 'root'
})
export class ExportExcel {
  byJson(jsonData: any, fileName: string, header?: string[]): void {
    // create a worksheet
    const ws = XLSX.utils.json_to_sheet(jsonData, { header: header });
    // create a workbook
    let wb = XLSX.utils.book_new();
    // workbook append worksheet
    XLSX.utils.book_append_sheet(wb, ws, fileName);

    const data = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
    fileSaver.saveAs(new Blob([data], { type: 'application/octet-stream' }), `${fileName}.xlsx`);
  }

  byTable(table: any, fileName: string): void {
    const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(table);
    const workbook: XLSX.WorkBook = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(workbook, ws, fileName);
    const excelBuffer: any = XLSX.write(workbook, {
      bookType: 'xlsx',
      type: 'array'
    });
    const data: Blob = new Blob([excelBuffer], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
    });
    fileSaver.saveAs(data, `${fileName}.xlsx`);
  }
}

3. There are two solutions to implement it.

a. Solution 1: export Excel by Table

// Solution 1: export Excel by Table
  @ViewChild('basicTable', { read: ElementRef }) nzTable!: ElementRef;

  exportExcelByTable(): void {
    const fileName = 'exportExcelByTable';
    this.expExcel.byTable(this.nzTable.nativeElement, fileName);
    console.log(this.nzTable.nativeElement);
  }

b. Solution 2: export Excel by Json

// Solution 2: export Excel by Json
  excelHeader = [
    {
      title: '#',
      fieldName: 'key'
    },
    {
      title: '姓名',
      fieldName: 'name'
    },
    {
      title: '年齡',
      fieldName: 'age'
    },
    {
      title: '地址',
      fieldName: 'address'
    }
  ];

  exportExcelByJson(): void {
    const fileName = 'exportExcelByJson';

    let jsonData: any;
    // listOfData from API
    jsonData = this.listOfData.map((row: any) => {
      let data: any = {};
      this.excelHeader.map((item: { fieldName: string; title: string }) => {
        data[item.title] = row[item.fieldName];
      });
      return data;
    });
    this.expExcel.byJson(jsonData, fileName);
  }

4. The full source code

import { NgFor } from '@angular/common';
import { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { FormsModule } from '@angular/forms';

import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzDividerModule } from 'ng-zorro-antd/divider';
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzTableModule } from 'ng-zorro-antd/table';
import { ExportExcel } from 'src/custom/services/export-excel.service';

interface Person {
  key: string;
  name: string;
  age: number;
  address: string;
}

@Component({
  selector: 'app-pages-sample-export-excel',
  template: `
    <nz-table #basicTable [nzData]="listOfData">
      <thead>
        <tr>
          <th>Name</th>
          <th>Age</th>
          <th>Address</th>
          <th>Action</th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let data of basicTable.data">
          <td>{{ data.name }}</td>
          <td>{{ data.age }}</td>
          <td>{{ data.address }}</td>
          <td>
            <a>Action 一 {{ data.name }}</a>
            <nz-divider nzType="vertical"></nz-divider>
            <a>Delete</a>
          </td>
        </tr>
      </tbody>
    </nz-table>
    <button nz-button (click)="exportExcelByTable()">Export Excel By Table</button>
    <button nz-button (click)="exportExcelByJson()">Export Excel By Json</button>
  `,
  changeDetection: ChangeDetectionStrategy.OnPush,
  standalone: true,
  imports: [NzTableModule, NzDividerModule, NzButtonModule, NgFor, NzInputModule, FormsModule]
})
export class ExportExcelComponent implements OnInit {
  listOfData: Person[] = [
    {
      key: '1',
      name: 'John Brown',
      age: 32,
      address: 'New York No. 1 Lake Park'
    },
    {
      key: '2',
      name: 'Jim Green',
      age: 42,
      address: 'London No. 1 Lake Park'
    },
    {
      key: '3',
      name: 'Joe Black',
      age: 32,
      address: 'Sidney No. 1 Lake Park'
    }
  ];

  constructor(private expExcel: ExportExcel) {}

  ngOnInit(): void {}

  // Solution 1: export Excel by Table
  @ViewChild('basicTable', { read: ElementRef }) nzTable!: ElementRef;

  exportExcelByTable(): void {
    const fileName = 'exportExcelByTable';
    this.expExcel.byTable(this.nzTable.nativeElement, fileName);
    console.log(this.nzTable.nativeElement);
  }

  // Solution 2: export Excel by Json
  excelHeader = [
    {
      title: '#',
      fieldName: 'key'
    },
    {
      title: '姓名',
      fieldName: 'name'
    },
    {
      title: '年齡',
      fieldName: 'age'
    },
    {
      title: '地址',
      fieldName: 'address'
    }
  ];

  exportExcelByJson(): void {
    const fileName = 'exportExcelByJson';

    let jsonData: any;
    // listOfData from API
    jsonData = this.listOfData.map((row: any) => {
      let data: any = {};
      this.excelHeader.map((item: { fieldName: string; title: string }) => {
        data[item.title] = row[item.fieldName];
      });
      return data;
    });
    this.expExcel.byJson(jsonData, fileName);
  }
}

5. Test result

[Angular] Export excel from table or json,UI,json,前端,angular,经验分享,excel,typescript

[Angular] Export excel from table or json,UI,json,前端,angular,经验分享,excel,typescript文章来源地址https://www.toymoban.com/news/detail-602977.html

到了这里,关于[Angular] Export excel from table or json的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kendo UI for Angular 学习笔记

    [ maxlength ]:最大输入长度 [showSuccessIcon] / [showErrorIcon]:  显示内置验证图标 kendoTextBoxPrefixTemplate:前 后缀 icon [ clearButton ]=\\\"true\\\" : TextBox 中呈现 Clear 按钮 (“X”) [( ngModel )]=\\\"value变量\\\"  :双向绑定  [ disabled ]=\\\"isDisabled\\\" :禁用组件,isDisabled 变量值为布尔值  [ readonly ]=\\\"true

    2024年02月02日
    浏览(46)
  • 2023.07.07面试偏前端angular

    ==和===是JavaScript中的两个比较运算符,用于比较两个值的相等性。 ==是松散相等运算符,它会进行类型转换后再比较值是否相等。如果两个值的类型不同,==会尝试将它们转换为相同的类型,然后再进行比较。例如,1 == \\\'1\\\'会返回true,因为它们在进行比较之前会被转换为相同

    2024年02月13日
    浏览(41)
  • 前端Angular框架基础知识(一)

    1.1 数据绑定 数据驱动DOM:将组件 类 (.ts文件)中的数据显示在组件 模板 (.html文件)中,当类中的数据发生变化会自动同步到模板中. Angular中使用差值表达式进行数据绑定, {{ }}语法 1.2 属性绑定 1.2.1 普通属性 使用【属性名称】为元素绑定DOM对象属性 使用【attr.属性名称】为元

    2024年01月17日
    浏览(40)
  • [Angular] Custom a DatePipe to support special time zone conversion from user

    It didn\\\'t use a time zone format of datetime in database, data has only one time zone.    So I\\\'ll define a custom DatePipe to extend DatePipe in my source code of Angular. a. Component   providers: [MyDatePipe],   imports: [MyDatePipe] b. Html

    2024年02月11日
    浏览(41)
  • 三大前端技术(React,Vue,Angular)

    React(也被称为React.js或ReactJS)是一个用于构建用户界面的JavaScript库。它由Facebook和一个由个人开发者和公司组成的社区来维护。 React可以作为开发单页或移动应用的基础。然而,React只关注向DOM渲染数据,因此创建React应用通常需要使用额外的库来进行状态管理和路由,Red

    2024年02月09日
    浏览(54)
  • 前端开发框架生命周期详解:Vue、React和Angular

    作为前端开发者,掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中,Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期,包括每个阶段的含义、用途以及如何最大限度地利用它们。通过详细的代码示例和实用的技巧

    2024年02月13日
    浏览(53)
  • 前端框架之战:React vs Vue vs Angular

    前端框架在现代网页开发中扮演着越来越重要的角色,它们为开发者提供了一种更高效、可扩展的方式来构建复杂的用户界面。在过去的几年里,我们看到了许多前端框架和库的出现,如React、Vue和Angular等。这三个框架分别由Facebook、Google和AngularJS团队开发,它们都是目前最

    2024年02月03日
    浏览(50)
  • Unity WebGl和前端(Angular)相互调用(含跨域问题)

    在Unity官方文档中就已经介绍了Unity和JS相互调用的问题,但是我们实际的应用中往往是使用iframe来展示WebGL。这样不但是webgl和js相互调用的问题,还包含了iframe跨域的问题。 我们的项目中前端使用的是angular框架,就以angular为基础来说一下这个问题,当然vue的前端框架应该都

    2024年02月15日
    浏览(46)
  • 前端面试:【Angular】打造强大Web应用的全栈框架

    嗨,亲爱的Angular探险家!在前端开发的旅程中,有一个全栈框架,那就是 Angular 。Angular提供了模块化、组件化、依赖注入、路由和RxJS等特性,助力你构建强大、可扩展的Web应用。 1. 什么是Angular? Angular是一个由Google开发的JavaScript框架,用于构建现代Web应用。它是一个全栈

    2024年02月11日
    浏览(40)
  • 【前端架构】Angular,React,Vue那个是2023的最佳选择?

    当开始一个新的web开发项目时,许多开发人员都有一个问题:“什么工具是最合适的?” 显然,JavaScript是骨干,因为今天它提供了创建前端的广泛功能。但是人们在选择框架时面临着两难,因为JS中有很多框架,而且每个框架都有突出的特性。 通常,争论都是基于三个框架——

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包