思路,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);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。