Json数据导出生成Excel

  最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点。根据这次的经验,写了个导出的小样例。

  总体思路就是json数据的key,value跟Excel的行列转换,还有就是解决数据在Excel表格中存放的位置,区域问题。

  这里要用到的两个小插件,一个是xslx.js,一个是FileSaver.js,前者是来处理生成Excel的,后者是用来把文件下载保存到本地的。

下载地址:

https://github.com/eligrey/FileSaver.js

https://github.com/SheetJS/js-xlsx/tree/028d7010a516383cb9a2fdd0f0a919392e77600a/demos/angular

 1 <!DOCTYPE html>
 2 <html>
 3
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>导出生成excel</title>
 7     <script src="js/xlsx.full.min.js"></script>
 8     <script src="js/FileSaver.min.js"></script>
 9 </head>
10
11 <body>
12     <button onclick="downloadExl(students)">导出</button>
13     <script>
14         var students = [{
15             "name": "小明1",
16             "age": "6",
17             "sex": "男",
18             "height": "60"
19         }, {
20             "name": "小明2",
21             "age": "7",
22             "sex": "男",
23             "height": "70"
24         }, {
25             "name": "小明3",
26             "age": "8",
27             "sex": "男",
28             "height": "80"
29         }];
30         function downloadExl(data, type) {
31
32             var keys = Object.keys(data[0]);
33             var firstRow = {};
34             keys.forEach(function (item) {
35                 firstRow[item] = item;
36             });
37             data.unshift(firstRow);
38
39             var content = {};
40
41             // 把json格式的数据转为excel的行列形式
42             var sheetsData = data.map(function (item, rowIndex) {
43                 return keys.map(function (key, columnIndex) {
44                     return Object.assign({}, {
45                         value: item[key],
46                         position: (columnIndex > 25 ? getCharCol(columnIndex) : String.fromCharCode(65 + columnIndex)) + (rowIndex + 1),
47                     });
48                 });
49             }).reduce(function (prev, next) {
50                 return prev.concat(next);
51             });
52
53             sheetsData.forEach(function (item, index) {
54                 content[item.position] = { v: item.value };
55             });
56
57             //设置区域,比如表格从A1到D10,SheetNames:标题,
58             var coordinate = Object.keys(content);
59             var workBook = {
60                 SheetNames: ["helloSheet"],
61                 Sheets: {
62                     "helloSheet": Object.assign({}, content, { "!ref": coordinate[0] + ":" + coordinate[coordinate.length - 1] }),
63                 }
64             };
65             //这里的数据是用来定义导出的格式类型
66             var excelData = XLSX.write(workBook, { bookType: "xlsx", bookSST: false, type: "binary" });
67             var blob = new Blob([string2ArrayBuffer(excelData)], { type: "" });
68             saveAs(blob, "hello.xlsx");
69         }
70         //字符串转字符流
71         function string2ArrayBuffer(s) {
72             var buf = new ArrayBuffer(s.length);
73             var view = new Uint8Array(buf);
74             for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
75             return buf;
76         }
77         // 将指定的自然数转换为26进制表示。映射关系:[0-25] -> [A-Z]。
78         function getCharCol(n) {
79             let temCol = "",
80                 s = "",
81                 m = 0
82             while (n > 0) {
83                 m = n % 26 + 1
84                 s = String.fromCharCode(m + 64) + s
85                 n = (n - m) / 26
86             }
87             return s
88         }
89     </script>
90 </body>
91
92 </html>
时间: 2024-10-31 18:53:15

Json数据导出生成Excel的相关文章

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据填充的.在导入excel填充json数据到页面时,真的让我差点吐血了.在做这个导入导出的时候,那一个礼拜都是黑暗的. 好了,废话不多说了,我今天就给大家展示这个两个功能的核心点,excel生成json数据和json数据生成excel文件. 一:从上传文件到服务器,后台java解析,

tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)

#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', '5列') #需写入的数据,按照一行一行的输入 #元组数据的个数必须和列数一致 data = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')] #写入数据 mylist = tablib.Dataset(*data, head

json数据导出excel

最近做的一个项目涉及到把数据导出到excel里面,网上找来找去,最终找到两种办法,废话不多说了 第一种: 拿到表格的id就可以抓取表格的数据,导出到excel,这种方式简单粗暴,引入这两个插件即可. 但是用这种方式会出现一种问题,就是当你的table有分页的情况下,这玩意只能抓取页面上的值,所以也不用多说了,其他分页的是导不出来的,值能导出当前分页的数据. 但是项目要求必须导出所有数据,这就出现了第二种解决方案, 使用起来也比较简单,拿到数据直接往里面塞就是了,最后调用方法.这样的话最终所有数据

Delphi 数据导出到Excel

好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制文件流,不需要安装Excel) 3.如果涉及到复杂表头的(例如合并字段等),未做研究,下面也没介绍相关资料,请止步. 第一种,ADODB导出查询结果(此方法需要安装Excel) //uses DB, ADODB, ComObj, ComCtrls, excel2000, StdCtrls, adoi

使用原生php将数据库数据导出到excel文件中

最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件.因为以前没做过,所以就百度了一下, 网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在 也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下. 一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种 方法来完

如何将数据库的表导出生成Excel?

1.如何通过元数据拿到数据库的信息? 2.如何用Java生成Excel表? 3.将数据库中的表导出生成Excel案例 如何通过元数据拿到数据库的信息 元数据:描述数据的数据 Java中使用元数据的两个方法 DatabaseMetaData 通过连接可以拿到的信息:数据库软件,所有数据库名,所有数据库里面的表名,描述数据库的元数据 ResultSetMetaData 拿到的表结构信息:获得表的列数目 类型和属性 ,描述数据库表的元数据 DatabaseMetaData 的使用学习 @Test//

PHP导出生成Excel文件

PHP导出生成Excel首先需要下载安装office扩展 可以自行下载,也可以通过composer下载安装 个人比较建议后者 代码很简单  不废话直接上代码 /** * @param $file_name String 文件名称 * @param $title String 标题 * @param $order String 中文的表格序以逗号方式连接 * @param $data array 数据集 * @param $data_order String 数据集合key以逗号的方式连接 */

C#大量数据导出到Excel

工作过程中经常会用到将数据导出到Excel中,一般情况下需要导出的数据都是几百几千条或者上万条,这都没有什么问题,但有时候会遇到特殊的需求,客户要求把几十万条甚至上百万条的数据导出到Excel中,这就比较麻烦了.当数据量很大导出到Excel表格的时候通常会遇到两个问题:一个是内存溢出,由于需要处理的数据量比较大,导致Excel占用的内存过多从而导致数据还没有导出完就因为内存溢出而失败:另一个是每张Excel表单最多只能有65536行,所以当DataTable或DataSet中数据多于65536行

C# 泛型List对象数据 导出 成 EXCEL数据表

1          /// <summary>  2         /// 将一组对象导出成EXCEL  3         /// </summary>  4         /// <typeparam name="T">要导出对象的类型</typeparam>  5         /// <param name="objList">一组对象</param>  6         //