起因

我们在工作过程中,偶尔会有需求是把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小工具分享【不限制大小】相关推荐

  1. java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换

    众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...

  2. 在线JSON转换成Excel文件工具

    在线JSON转换成Excel文件工具 在线JSON转换成Excel文件工具 本工具可以将JSON数据在浏览器本地转换成Excel支持一键下载. JSON:(JavaScript Object Nota ...

  3. android office转pdf,怎么把安卓手机的PDF转换成Word?3款实用工具分享

    如今,手机已成为人们日常工作和生活中必不可少的伴侣.手机功能和服务的不断创新和升级促进了用户体验的不断提高.只要每天带手机出去,每个人都可以做任何事情.对于经常使用手机工作的朋友,很多时候需要把PDF ...

  4. 如何把pdf转换成excel呢?教你简单的方法

    PDF是我们日常生活中最常用的.毕竟PDF文件易读,兼容性高,布局非常清晰,不会出现错版.但是PDF文件只能阅读,不能编辑,所以我们需要对转换成各种格式的文档进行检查和编辑.那么,当我们收到一个PDF ...

  5. 如何把pdf转换成excel呢?

    对于我们这些经常上班的小伙伴们来说,使用PDF文件这是工作中必不可少的.但有时在工作中需要将这些文件转换成Excel格式.而转换成Excel格式是一件很麻烦的事.它可以防止无意中触摸键盘而修改内容.同 ...

  6. PDF怎么转换成excel免费?快收藏这几个方法

    在我们日常处理的的工作文件中,PDF文件的数量是越来越高的,而且因为PDF文件比较方便观看,所以很多数据文件也都是PDF格式的,不过PDF文件是不可编辑的,所以在一定程度上还是有限制的,这样我们就不能 ...

  7. 将pdf转换成excel表格不乱

    当我们在办公中碰到的都是数据表格的PDF文件时,想要提取表格中的内容,就得将PDF文件转变成可编辑的Excel表格,如何将PDF转换成Excel?今天和大家分享一种简单的方法,不需下载软件并且免费使用 ...

  8. 如何将PPT转换成Excel表格?教大家一种转换小妙招

    怎么把PPT文件转换成Excel表格呢?大家对于这两种文件格式的转换见到的并不多,正因为不常见,所以在遇到的时候很难有方法能够解决.其中在工作中,用于演讲展示的PPT文件使用完后,可能里面的数据比较多 ...

  9. excel怎么转换成左上角带绿色小三角的文本格式

    excel怎么转换成左上角带绿色小三角的文本格式 选中需要转换格式的单元格数据,点击顶部菜单栏中的数据菜单,在数据菜单下的数据工具组里点击分列选项

最新文章

  1. 个性化服务谋定移动电子商务-李玉庭:经信研究重整购物
  2. 感知机中任一点到超平面的距离的公式推导
  3. web安全---SSRF漏洞
  4. C#设计模式之9-装饰者模式
  5. C3P0连接池详细配置
  6. 20190925:(经典算法系列)河内之塔
  7. 对自己的python项目配置PYTHONPATH
  8. 基于LVDS的高速自同步串行传输系统的研究
  9. RSA私钥及公钥生成
  10. 刚才读《基于Lucene的中文自然语言搜索引擎》后感
  11. 【Spring】概述及IOC理论推导
  12. 机器学习项目 - ctr 电商点击率预估
  13. 这家伙有点懒,还没有个性签名 :) --工具篇03
  14. Linux中nvme驱动详解
  15. 基于Docker的交互式人脸识别应用
  16. Sketch占满MacBook200G硬盘的解决方法
  17. https请求连接超时
  18. python 3.0 实现多级反馈队列进程调度算法
  19. Android结合源码分析Power按键处理流程
  20. 玩于鼓掌之中的小老虎机——Tiny Tiger Machine

热门文章

  1. Cadence(virtuoso)集成电路设计软件基本操作——库管理
  2. python控制nao机器人身体动作实例
  3. 2021年淘宝双11超级红包规则介绍
  4. 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
  5. 当攀藤 PM2.5 传感器遇上 RT-Thread(国产实时线程操作系统内核)(转载)
  6. MES入门.浅谈ISA-88
  7. dell emc isilon解决添加AD域后有时间不同步警告
  8. C. NEKO's Maze Game
  9. 人脸识别技术在智慧城城市建设中的深度应用
  10. 天河二号超级计算机能买到吗,天河二号计算机是巨型机吗