Angular下用js-xlsx和file-saver组合导出excel(适配IE浏览器)

import {Injectable} from '@angular/core';
import {Headers, Http} from '@angular/http';
import * as XLSX from 'xlsx';
import * as FileSaver from 'file-saver';

@Injectable()
export class FileService {

    constructor(private http: Http) {
    }
    multiDownLoadExl(dataAll, merges, sheetNames) {
        console.log(merges);
        const wb: XLSX.WorkBook = {SheetNames: sheetNames, Sheets: {}, Props: {}};
        const toSet = XLSX.utils.json_to_sheet(dataAll, {skipHeader: true});
        wb.Sheets[sheetNames[0]] = toSet; // 通过json_to_sheet转成单页(Sheet)数据
        const wsname: string = wb.SheetNames[0];
        const ws: XLSX.WorkSheet = wb.Sheets[wsname];
        // ws['!cols'] = colProp[item]; // 单元格宽度
        // ws['!rows'] = rowProp[item]; // 列高
        ws['!merges'] = merges; // 合并单元格
        let fileName = 'excel导出.xlsx';
        this.saveAs(
            new Blob([this.s2ab(XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}))], {type: ''}), fileName);
    }
    saveAs(obj, fileName) { // 当然可以自定义简单的下载文件实现方式
    // 这段注销的代码,通过虚拟一个a标签,加一个click事件就可以完美进行excel下载,但是,因项目需求为IE浏览器,
    外加本人才疏学浅,故用了一个小窍门,通过插件FileSaver去进行文件的下载,这样下载的excel文件如下图
        /*const tmpa = document.createElement('a');
        tmpa.download = fileName || '下载';
        tmpa.href = URL.createObjectURL(obj); // 绑定a标签
        let a = encodeURIComponent(tmpa.href);
        tmpa.click();
        setTimeout(function () { // 延时释放
            URL.revokeObjectURL(obj); // 用URL.revokeObjectURL()来释放这个object URL
        }, 100);*/
        FileSaver.saveAs(obj, fileName);
    }
    s2ab(s) {
        if (typeof ArrayBuffer !== 'undefined') {
            const buf = new ArrayBuffer(s.length);
            const view = new Uint8Array(buf);
            for (let i = 0; i !== s.length; ++i) {
                view[i] = s.charCodeAt(i)  & 0xFF;
            }
            return buf;
        } else {
            const buf = new Array(s.length);
            for (let i = 0; i !== s.length; ++i) {
                buf[i] = s.charCodeAt(i) & 0xFF;
            }
            return buf;
        }
    }
}
这样的下载方式,可以弥补File-saver下载完没有样式的bug,

Angular下用js-xlsx和file-saver组合导出excel(适配IE浏览器)