json转换成excel在线js小工具分享【不限制大小】
起因
我们在工作过程中,偶尔会有需求是把json转换成excel的需求。一般这个时候,我们会跑到度娘那,在输入框中输入:“json excel”。然后,你会发现这个一个网站“https://json-csv.com/”,
出现在结果的第一个位置。
进去用了一下,很好用。收藏了。但是过几天,又要用的时候,忽然发现,导不出excel了。盯着上面的英文看了一会。发现这TMD的网站,居然对文件大小进行了限制。必须注册,收费才能上传大于1m以上的文件。@##KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲%$%&&*%^%
这个功能对于我来说,并非刚需,也是偶发的。而且感觉也不会太难,于是就起了自己做一个“在线小工具”的念头。放开大小限制,让大伙痛快的用。
操作也是差不多,支持直接输入json和文件上传。可以导出xls,也可以导出xlsx。如果你的数据比较多的话,建议使用firefox浏览器,导出为xlsx。之所以建议你用导出xlsx,是因为如果导出的行数超过6w的话,xls是不支持的。而推荐使用firefox的原因是因为我的代码实现方式,需要用到dataURI。各个浏览器,对它的大小有限制。firefox则是无限制。使用它导出15M的json,都是秒级的,很快。
大家可以体验下http://j2e.kpoda.com/
硬货
以下是主要代码
function exportJson2Excel(json, type) {//TODO 记录导出操作日志var log = {"type": "json2excel"};
//titletry {var title = new Set();for (var i = 0; i < json.length; i++) {var r = json[i];getProFromObject(r, title);}console.log("title", title);var data = [];for (var i = 0; i < json.length; i++) {var r = json[i];var dataRow = [];title.forEach(function (t) {var d1 = r[t];var ss = t.split(".");if (ss.length >= 2) {var tmp = r;for (var i = 0; i < ss.length; i++) {var s = ss[i];tmp = tmp[s];if (!tmp) {break;}}d1 = tmp;}if (d1) {if (typeof d1 == 'object') {dataRow.push(JSON.stringify(d1));} else {dataRow.push(d1);}} else {dataRow.push("");}});data.push(dataRow);}console.log("data", data);jsonToExcelConvertor(data, 'Report', Array.from(title), type);} catch (err) {console.error(err);alert("导出报错:" + err.stack);log.error = err.stack;log.json = json;} finally {OplogsService.save(log).$promise.then(function (res) {console.log(res);}).catch(function (error) {console.log(error);alert("系统错误:" + JSON.stringify(error));});}}
getProFromObject方法用来获取json对象的属性,其对应excel的列。其中用到了递归。
function getProFromObject(r, title, parentsPros) {for (var rp in r) {if (parentsPros) {title.add(parentsPros + "." + rp);} else {title.add(rp);}if (typeof r[rp] == 'object') {if (parentsPros) {getProFromObject(r[rp], title, parentsPros + "." + rp);} else {getProFromObject(r[rp], title, rp);}}}}
jsonToExcelConvertor方法用于把整理好的数据,转换为DataURI,输出excel。
function jsonToExcelConvertor(JSONData, FileName, ShowLabel, type) {type = type ? type : "xls";var application = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";if (type == "xls") {application = "application/vnd.ms-excel";}// 先转化jsonvar arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;var excel = '<table>';// 设置表头var rr = '<tr>';for (var j = 0, l = ShowLabel.length; j < l; j++) {rr += '<td>' + ShowLabel[j] + '</td>';}// 换行excel += rr + '</tr>';// 设置数据for (var i = 0; i < arrData.length; i++) {var row = '<tr>';for (var index = 0; index < arrData[i].length; index++) {var value = arrData[i][index] === '.' ? '' : arrData[i][index];row += '<td>' + value + '</td>';}excel += row + '</tr>';}excel += '</table>';var excelFile = '<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\'>';excelFile += '<meta http-equiv="content-type" content="' + application + '; charset=UTF-8">';excelFile += '<meta http-equiv="content-type" content="' + application;excelFile += '; charset=UTF-8">';excelFile += '<head>';excelFile += '<!--[if gte mso 9]>';excelFile += '<xml>';excelFile += '<x:ExcelWorkbook>';excelFile += '<x:ExcelWorksheets>';excelFile += '<x:ExcelWorksheet>';excelFile += '<x:Name>';excelFile += '{worksheet}';excelFile += '</x:Name>';excelFile += '<x:WorksheetOptions>';excelFile += '<x:DisplayGridlines/>';excelFile += '</x:WorksheetOptions>';excelFile += '</x:ExcelWorksheet>';excelFile += '</x:ExcelWorksheets>';excelFile += '</x:ExcelWorkbook>';excelFile += '</xml>';excelFile += '<![endif]-->';excelFile += '</head>';excelFile += '<body>';excelFile += excel;excelFile += '</body>';excelFile += '</html>';var uri = 'data:' + application + ';charset=utf-8,' + encodeURIComponent(excelFile);var link = document.createElement('a');link.href = uri;//TODO Cannot set property style of #<HTMLElement> which has only a getter// link.style = 'visibility:hidden';$(link).css("visibility", "hidden");// link.download = FileName + '.'+type;$(link).attr("download", FileName + '.' + type);document.body.appendChild(link);link.click();document.body.removeChild(link);}
json转换成excel在线js小工具分享【不限制大小】相关推荐
- java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换
众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...
- 在线JSON转换成Excel文件工具
在线JSON转换成Excel文件工具 在线JSON转换成Excel文件工具 本工具可以将JSON数据在浏览器本地转换成Excel支持一键下载. JSON:(JavaScript Object Nota ...
- android office转pdf,怎么把安卓手机的PDF转换成Word?3款实用工具分享
如今,手机已成为人们日常工作和生活中必不可少的伴侣.手机功能和服务的不断创新和升级促进了用户体验的不断提高.只要每天带手机出去,每个人都可以做任何事情.对于经常使用手机工作的朋友,很多时候需要把PDF ...
- 如何把pdf转换成excel呢?教你简单的方法
PDF是我们日常生活中最常用的.毕竟PDF文件易读,兼容性高,布局非常清晰,不会出现错版.但是PDF文件只能阅读,不能编辑,所以我们需要对转换成各种格式的文档进行检查和编辑.那么,当我们收到一个PDF ...
- 如何把pdf转换成excel呢?
对于我们这些经常上班的小伙伴们来说,使用PDF文件这是工作中必不可少的.但有时在工作中需要将这些文件转换成Excel格式.而转换成Excel格式是一件很麻烦的事.它可以防止无意中触摸键盘而修改内容.同 ...
- PDF怎么转换成excel免费?快收藏这几个方法
在我们日常处理的的工作文件中,PDF文件的数量是越来越高的,而且因为PDF文件比较方便观看,所以很多数据文件也都是PDF格式的,不过PDF文件是不可编辑的,所以在一定程度上还是有限制的,这样我们就不能 ...
- 将pdf转换成excel表格不乱
当我们在办公中碰到的都是数据表格的PDF文件时,想要提取表格中的内容,就得将PDF文件转变成可编辑的Excel表格,如何将PDF转换成Excel?今天和大家分享一种简单的方法,不需下载软件并且免费使用 ...
- 如何将PPT转换成Excel表格?教大家一种转换小妙招
怎么把PPT文件转换成Excel表格呢?大家对于这两种文件格式的转换见到的并不多,正因为不常见,所以在遇到的时候很难有方法能够解决.其中在工作中,用于演讲展示的PPT文件使用完后,可能里面的数据比较多 ...
- excel怎么转换成左上角带绿色小三角的文本格式
excel怎么转换成左上角带绿色小三角的文本格式 选中需要转换格式的单元格数据,点击顶部菜单栏中的数据菜单,在数据菜单下的数据工具组里点击分列选项
最新文章
- 个性化服务谋定移动电子商务-李玉庭:经信研究重整购物
- 感知机中任一点到超平面的距离的公式推导
- web安全---SSRF漏洞
- C#设计模式之9-装饰者模式
- C3P0连接池详细配置
- 20190925:(经典算法系列)河内之塔
- 对自己的python项目配置PYTHONPATH
- 基于LVDS的高速自同步串行传输系统的研究
- RSA私钥及公钥生成
- 刚才读《基于Lucene的中文自然语言搜索引擎》后感
- 【Spring】概述及IOC理论推导
- 机器学习项目 - ctr 电商点击率预估
- 这家伙有点懒,还没有个性签名 :) --工具篇03
- Linux中nvme驱动详解
- 基于Docker的交互式人脸识别应用
- Sketch占满MacBook200G硬盘的解决方法
- https请求连接超时
- python 3.0 实现多级反馈队列进程调度算法
- Android结合源码分析Power按键处理流程
- 玩于鼓掌之中的小老虎机——Tiny Tiger Machine
热门文章
- Cadence(virtuoso)集成电路设计软件基本操作——库管理
- python控制nao机器人身体动作实例
- 2021年淘宝双11超级红包规则介绍
- 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
- 当攀藤 PM2.5 传感器遇上 RT-Thread(国产实时线程操作系统内核)(转载)
- MES入门.浅谈ISA-88
- dell emc isilon解决添加AD域后有时间不同步警告
- C. NEKO's Maze Game
- 人脸识别技术在智慧城城市建设中的深度应用
- 天河二号超级计算机能买到吗,天河二号计算机是巨型机吗