js实现数据导出为EXCEL(支持大量数据导出)
网络编程 2021-07-04 15:02www.168986.cn编程入门
这篇文章主要为大家详细介绍了js实现数据导出为EXCEL,支持大量数据导出,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
数据导出为excel是前端比较常用的功能。笔者近期在网上收集汇总了几种常用的方法,供大家使用。
1、ActiveXObject(“Excel.Application”)
这种方法只能在IE下使用。
优点参照VBA控制excel对象。(代码不会的可以录制宏)
缺点引用cell对象太慢,上万行数据导出时间超过2分钟
2、以Table方式导出为html文件。
3、以CSV方式导出。
使用中发现如果数据较多,上述第2、3中方法会失效,又整理了第4种方法 toLargerCSV。
第4种方法在IE10、chrome测试通过
<html> <head> <div>以Table格式导为xls文件 <button onclick='TableToExcel()'>导出</button></div> <div>导出CSV文件 <button onclick='toCSV()'>导出</button></div> <div>大量数据导出CSV <button onclick='toLargerCSV()'>导出</button></div> </head> <body> <script> //以Table格式导为xls文件 function TableToExcel(){ //要导出的json数据 var jsonData = [ { name:'001', id:'621699190001011231' }, { name:'002', id:'52069919000101547X' }, { name:'003', id:'423699190103015469' }, { name:'004', id:'341655190105011749' } ] //导出前要将json转成table格式 //列标题 var str = '<tr><td>name</td><td>id</td></tr>'; //具体数值 遍历 for(let i = 0;i < jsonData.length;i++){ str += '<tr>'; for(let item in jsonData[i]){ var cellvalue = jsonData[i][item]; //不让表格显示科学计数法或者其他格式 //方法1 tr里面加 style="mso-number-format:'\@';" 方法2 是改为 = 'XXXX'格式 //如果纯数字且超过15位 /var reg = /^[0-9]+.?[0-9]$/; if ((cellvalue.length>15) && (reg.test(cellvalue))){ //cellvalue = '="' + cellvalue + '"'; }/ //此处用`取代',具体用法搜索模板字符串 ES6特性 str+=`<td style="mso-number-format:'\@';">${cellvalue}</td>`; // str+=`<td>${cellvalue}</td>`; } str+='</tr>'; } var worksheet = '导出结果' var uri = 'data:application/vnd.ms-excel;base64,'; //下载的表格模板数据 var template = `<html xmlns:o="urn:schemas-microsoft-:office:office" xmlns:x="urn:schemas-microsoft-:office:excel" xmlns="http://.w3./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>`; //下载模板 function base64 (s) { return window.btoa(unescape(encodeURIComponent(s)))} window.location.href = uri + base64(template); } function toCSV(){ //要导出的json数据 var jsonData = [ { name:'001', id:'621699190001011231' }, { name:'002', id:'52069919000101547X' }, { name:'003', id:'423699190103015469' }, { name:'004', id:'341655190105011749' } ] //导出前要将json转成table格式 //列标题 var str = 'name,id\n'; //具体数值 遍历 for(let i = 0 ; i < jsonData.length ; i++ ){ for(let item in jsonData[i]){ //增加\t为了不让表格显示科学计数法或者其他格式 //此处用`取代',具体用法搜索模板字符串 ES6特性 str+=`${jsonData[i][item] + '\t,'}`; } str+='\n'; } let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); var link = document.createElement("a"); link.href = uri; link.download = "导出.csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } //支持大批量数据导出,目前测试15万行 30列通过,导出时间约为6秒 function toLargerCSV(){ //CSV格式可以自己设定,适用MySQL导入或者excel打开。 //由于Excel单元格对于数字只支持15位,且首位为0会舍弃 建议用 =“数值” var str = '行号,内容,题目,标题\n'; for(let i=0;i<100000;i++){ str += i.toString()+',1234567890123456789\t,张三李四王五赵六,bbbb,\n' } var blob = new Blob([str], {type: "text/plain;charset=utf-8"}); //解决中文乱码问题 blob = new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); object_url = window.URL.createObjectURL(blob); var link = document.createElement("a"); link.href = object_url; link.download = "导出.csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } </script> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程