本来之前写过一个JS导出程序,但是也是网上东拼西凑写出来了,这两天有需求要写个excel导出,然后就出现一堆的问题,就准备记录下来。
原谅我好多东西也是网上百度别人的,但是都汇总了一下,也好给大家看,开始正文:
js导出excel的两种方法:
目录
js导出excel的两种方法:
方法一:
方法二:
以上两种方法在IE浏览器中无法正常使用
若需要支持ie需加以下代码:
再把遇到的问题罗列一下:
问题1:遇到导出excel表格时,银行账户号数字过长,导出的数字串变为计数法形式
问题2:js输出汉字乱码问题
方法一:
/**@tableId: table的Id*@fileName: 生成excel文件* ie浏览器无法导出*/function tableToExcel(tableID,fileName){var table = document.getElementById(tableID);var excelContent = table.innerHTML;var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='/TR/REC-html40'>";excelFile += "<head><meta charset='UTF-8'><!--[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>";excelFile += "<body><table>";excelFile += excelContent;excelFile += "</table></body>";excelFile += "</html>";console.log(excelFile)var link = "data:application/vnd.ms-excel;base64," + base64(excelFile);var a = document.createElement("a");a.download = fileName+".xls";a.href = link;a.click();}function base64 (content) {return window.btoa(unescape(encodeURIComponent(content)));}
方法二:
/**需要引入:jquery.table2excel.js**@$("#tableId"): table的id*/$('#btnExport').on('click', function() {$("#tableId").table2excel({exclude: ".noExl",name: "Excel Document Name",filename: "myFileName",exclude_img: true,exclude_links: true,exclude_inputs: true});});
以上两种方法在IE浏览器中无法正常使用
若需要支持ie需加以下代码:
if(!!window.ActiveXObject || "ActiveXObject" in window) {//判断是否为ie览器var curTbl = document.getElementById("ta");var oXL = new ActiveXObject("Excel.Application");//创建AX对象excelvar oWB = oXL.Workbooks.Add();//获取workbook对象var xlsheet = oWB.Worksheets(1);//激活当前sheetvar sel = document.body.createTextRange();sel.moveToElementText(curTbl);//把表格中的内容移到TextRange中sel.select;//全选TextRange中内容sel.execCommand("Copy");//复制TextRange中内容xlsheet.Paste();//粘贴到活动的EXCEL中oXL.Visible = true;//设置excel可见属性try {var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");} catch(e) {print("Nested catch caught " + e);} finally {oWB.SaveAs(fname);oWB.Close(savechanges = false);//xls.visible = false;oXL.Quit();oXL = null;//结束excel进程,退出完成//window.setInterval("Cleanup();",1);idTmr = window.setInterval("Cleanup();", 1);}}
再把遇到的问题罗列一下:
问题1:遇到导出excel表格时,银行账户号数字过长,导出的数字串变为计数法形式
解决方案一:
<tdstyle="mso-number-format:'\@';">100821199909091234</td>
增加了style="mso-number-format:'\@';"样式后 可以解决
解决方案二:
原来的:excelFile += "<body><table>";
修改为:excelFile += '<body><table style="vnd.ms-excel.numberformat:@">';
style="vnd.ms-excel.numberformat:@"的作用是把数据转换文本格式
问题2:js输出汉字乱码问题
解决方案一:
原来的:excelFile += "<head><meta ><!--[if gte mso 9]>
修改为:excelFile += "<head><meta charset='UTF-8'><!--[if gte mso 9]>