一 需求背景
后台不愿意生成excel,成功的甩到了web(有木有大神知道像导出生成文件的功能是放在服务端做好,还是放到客户端做好呢?求指导啊!!!),于是百度到了web侧生成excel文件,亲测,好用。。
二 核心插件
【1】npm install xlsx --save
详情见:https://www.npmjs.com/package/xlsx
【2】npm install file-saver --save
详情见:https://www.npmjs.com/package/file-saver
注意:如果下载失败,使用cnpm下载
三 代码
【1】创建一个导出按钮,用于出发导出函数
<button (click)="exportFile()">导出</button>
【2】使用插件,生成excel文件
/....../
exportFile(){
//生成excel表的数据是[{},...{}]形式,每个对象代表一行,key值代表列名
let json = [
{"A列": "***1","B列": "***2", "C列": "***3"},
{"A列": "***a","B列": "***b", "C列": "***c"}
];
const worksheet1: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
const worksheet2:XLSX.WorkSheet = XLSX.utils.json_to_sheet(json)
const workbook: XLSX.WorkBook = {
Sheets: { '1': worksheet1,"2":worksheet2},
SheetNames: ['1','2']
};
const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
//这里类型如果不正确,下载出来的可能是类似xml文件的东西或者是类似二进制的东西等
this.saveAsExcelFile(excelBuffer, "模板");
}
private saveAsExcelFile(buffer: any, fileName: string) {
//转成二进制流 这一步很重要
const data: Blob = new Blob([buffer], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
});
FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + '.xls');
}
/....../