Angular + xlsx + xlsx-js-style实现多个sheel页Excel下载

需求:前端实现将后台返回的数组数据转化为多页excel,并自定义样式

使用组件

1、xlsx
2、xlsx-js-style(官方:https://www.npmjs.com/package/xlsx-js-style)

xlsx这个插件可以把html中的table元素或者json数据转换成表格后进行导出

常用方法参数说明
book_new-创建一个空的book
table_to_booktable元素(dom)将table元素转换成 book
table_to_sheettable元素(dom)将table元素转换成 sheet
json_to_sheetjson数据(数组)将json数据转换成 sheet
book_append_sheet参数1:book对象,参数2:sheet对象,参数3:sheet名称将sheet添加到book中
writeFile参数1:book对象,参数2:导出的文件名称导出表格文件

本来准备使用 xlsx-style,但引入会报很多错,找到xlsx-js-style组件代替,使用方法相同

一、安装依赖

npm install xlsx --save
npm install file-saver --save
//样式组件
npm install xlsx-js-style

二、代码

//html
<button (click)="handleOk()">下载</button>

//ts
import * as XLSX from 'xlsx/xlsx.mjs';
var FileSaver = require('file-saver');
import * as XLSXStyle from 'xlsx-js-style';

// 下载excel
  exportFile(): void {
    //生成excel表的数据[{},...{}],每个对象代表一行,key值代表列名
    let json1: any = []
    //数组
    this.DataArr1.forEach(arr => {
      json1.push({
        "id": arr.Id,
        "code": arr.Code,
        "type": arr.Type,
      })
    })
    let json2: any = []
    this.DataArr2.forEach(arr => {
      json2.push({
        "id": arr.Id,
        "code": arr.Code,
        "type": arr.Type,
      })
    })
    const worksheet1: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json1,);
    const worksheet2: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json2,);
    //设置自定义样式
    this.setExlStyle(worksheet1);
    this.setExlStyle(worksheet2);
    const workbook: XLSX.WorkBook = {
      Sheets: { '页面1': worksheet1, "页面2": worksheet2},
      SheetNames: ['页面1', '页面2']
    };
    const excelBuffer: any = XLSXStyle.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, '文件名' + new Date().toLocaleDateString() + '.xls');
  }


//设置自定义样式
setExlStyle(data) {
    data["!cols"] = [];
    for (let key in data) {
      if (data[key] instanceof Object) {
        if (key === 'A1' || key === 'B1' || key === 'C1' || key === 'D1' || key === 'E1' || key === 'F1' || key === 'G1') {
          data[key].s = {
            // 字体
            font: {
              name: 'Microsoft YaHei UI',
              sz: 10,
              color: { rgb: "ffffff" },
              bold: true
            },
            alignment: {
              vertical: 'center',
              horizontal: 'center',
            },
            fill: {
              fgColor: { rgb: "298103" },
            },
          }
        } else {
          data[key].s = {
            // 字体
            font: {
              name: 'Microsoft YaHei UI',
              sz: 10,
            },
            alignment: {
              vertical: 'center',
              horizontal: 'left',
            },
          }
        }
      }
      data["!cols"].push({ wpx: 115 });
    }
    return data;
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Angular中,您可以使用ng-zorro-antd库中的`nz-date-picker`组件来创建一个带有日历和日期范围的日期选择器。以下是一个使用`nz-date-picker`的例子: 1. 首先,您需要在您的应用中安装和导入`ng-zorro-antd`库。 2. 在您的组件的HTML模板中添加一个`nz-date-picker`元素,并使用`nzMode`属性将其定义为日期选择器。 ```html <nz-date-picker nzMode="date"></nz-date-picker> ``` 3. 在您的组件中,您需要定义一个`nz-date-picker`对象,并将其与`nz-date-picker`元素相关联。您还可以使用`nzDisabledDate`属性来定义可选择的日期范围。 ```typescript import { Component } from '@angular/core'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; @Component({ selector: 'app-date-picker', templateUrl: './date-picker.component.html', styleUrls: ['./date-picker.component.css'] }) export class DatePickerComponent { disabledDate = (current: Date): boolean => { const minDate = new Date(2020, 0, 1); const maxDate = new Date(2020, 11, 31); return current < minDate || current > maxDate; } constructor() { } } ``` 在这个例子中,我们定义了一个`disabledDate`函数来禁用不在2020年1月1日和2020年12月31日之间的日期。 4. 最后,您需要在`nz-date-picker`中使用`nzFormat`属性来定义日期的格式。 ```html <nz-date-picker nzMode="date" nzFormat="yyyy-MM-dd" [nzDisabledDate]="disabledDate"></nz-date-picker> ``` 在这个例子中,我们将日期格式定义为`yyyy-MM-dd`。 这就是如何在Angular中使用ng-zorro-antd库中的`nz-date-picker`组件创建一个带有日历和日期范围的日期选择器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值