2

思路,js下载文件,无非就是生成base64,然后赋值给a标签进行导出下载

读取文件excel的filetype:

var input = document.querySelector('input');
input.addEventListener('change',function(){
    var file = this.files[0];
    fileOtions.type = file.type;
    var reader  = new FileReader();
    reader.onload = function(e){
        console.log(e.target.result);
    };
    reader.readAsDataURL(file);
},false);


//data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,

js中btoa可以把字符串转成base64编码。可以通过这个方法进行生成要导出的excel base64

btoa(unescape(encodeURIComponent('<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>' + str + '</table></body></html>')))

通过标签a可以下载一个文件:


var a = document.createElement('a');
a.href = template;
//部分网友回复说导出的excel打开时有提示,这是因为这里的后缀名,带x的时扩展名。老版本的用xls应该就可以 了。
//a.download = 'test.xlsx';
a.download = 'test.xls';

通过模拟点击事件,触发下载操作

var evt = document.createEvent("MouseEvents");
evt.initEvent("click", false, false);
a.dispatchEvent(evt);

最终代码:

 function html2excel(table,name) {
        // var table= '<thead><tr><th>test</th></tr></thead><tbody><tr><td>test</td></tr></tbody>';
        var template = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + btoa(unescape(encodeURIComponent('<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>' + table + '</table></body></html>')));
        var a = document.createElement('a');
        a.href = template;
        a.download = name+'.xlsx';
        var evt = document.createEvent("MouseEvents");
        evt.initEvent("click", false, false);
        a.dispatchEvent(evt);
    }

jsoncode
4k 声望786 粉丝

I'm jsoncode