Ng-Alain中的st表格组件实现导出界面不展示的列

  • Post author:
  • Post category:其他




一般需求:st数据(所有列/部分列)导出Excel

st组件提供了export()函数方便我们直接将表格的数据导出为Excel文档,在STColumn中也有参数

exported : boolean

来控制是否允许导出,这样就能实现界面上有展示的全导出,或者是控制表格中的某些列不导出,其他的导出的效果。下为代码示例:

//export(newData?: STData[] | true, opt?: STExportOptions)

  @ViewChild('st', {static: false}) st: STComponent;
  columns: STColumn[] = [
    {
      title: '操作',
      buttons: [
        {
          text: '详情',
          type: 'modal',
          modal: {
            component: testComponent
          },
          click: (record: STData, modal: any) => {
            this.st.reload();
          }
        },
        {
          text: '删除',
          type: 'modal',
          click: (e: any) => {
            this.modalSrv.confirm({
              nzTitle: '提醒',
              nzContent: '是否确认删除该条记录?',
              nzOkText: '确认',
              nzOkType: 'danger',
              nzOnOk: () => {
                //删除该记录
                this.http.delete(`url?id=${e.id}`).subscribe((res: any) => {
                  if (res.rtnCode == '000000') {
                    this.msgSrv.success("记录删除成功");
                    this.st.reload();
                  }
                })
              },
              nzCancelText: "返回",
              nzOnCancel: () => {
              }
            })
          }
        },
      ]
    },
    {title: '营销标题', index: 'title'},
    {title: '姓名', index: 'name'},
    {title: '手机号码', index: 'mobile'},
    {title: '备注', index: 'memo'},
  ];
  
//在HTML中调用export()
export(){
    this.http.get(`url?page=1&size=${this.st.total}`,this.sf.value)
    .subscribe((res: any) => {
      if (res.rtnCode != '000000')
        this.msgSrv.error("下载失败")
      this.expConf = {
        filename: 'st导出Excel文档.xlsx'
      }
      this.st.export(res.data.list, this.expConf);	//调用st组件的export方法
    });
  }

那如果返回的数据,比如备注信息,信息太长不方便在st列表中做展示,但是导出的时候希望能导出那要怎么实现呢?



使用 XlsxService 实现自定义导出


Ag-Alain官方文档介绍:xlsx Excel 操作


思想就是:将表格数据都存储在一个数组中,列名是该数组的第一个对象元素,再调用

XlsxService 中的 export()方法

,导出为Excel文档,以下为代码示例:

//TypeScript代码:
export class ComponentsXlsxExportComponent {
 constructor(private xlsx: XlsxService) {}
//表格数据
 users: any[] = Array(100)
   .fill({})
   .map((_item: any, idx: number) => {
     return {
       id: idx + 1,
       name: `name ${idx + 1}`,
       age: Math.ceil(Math.random() * 10) + 20,
     };
   });
   //在此自定你所想导出的列
 columns: STColumn[] = [
   { title: '编号', index: 'id', type: 'checkbox' },
   { title: '姓名', index: 'name' },
   { title: '年龄', index: 'age' },
 ];

 download() {
   //先将列名作为数组的第一个对象元素
   const data = [this.columns.map(i => i.title)];
   //再将数据依次插入数组
   this.users.forEach(i =>
     data.push(this.columns.map(c => i[c.index as string])),
   );
   //最后调用export()方法导出为Excel文档,注:可以导出多张表格
   this.xlsx.export({
     sheets: [
       {
         data: data,
         name: 'sheet name',
       },
     ],
   });
 }
}


//HTML代码:
<button nz-button (click)="download()">Export</button>
<st [data]="users" [ps]="3" [columns]="columns" class="mt-sm"></st>



版权声明:本文为secretbase12138原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。