nodejs Excel导出json

                       

开发Egret游戏的时候,策划经常性使用Excel操作数据。这些数据在前端不能以个整文件读取,但是Excel的格式实际上是xml,主要改成后缀zip 解压就能看到内部文件的格式。前端所需要的格式仅仅是在Excel改造后的格式。c#开发操作Excel,微软提供了强劲的API的支持。然而在其他语法开发如PHP 或者js的库里面都有这些库来完成解析Excel的操作,非常方便。除此之外,在开发过程也有使用数据库进行数据添加。

1 安装Excel解析

进入该网址https://www.npmjs.com/package/node-xlsx , 你可以看到相应的案例使用用法。我们需要进行安装依赖库,进入cmd 运行,输入 npm install node-xlsx。该地址会较慢需要等待一会。安装完后,本地就会多了node_modules 模块,点击进入后会发现我们的依赖库已经下载到本地了。
(注:测试环境window 7 已经安装nodejs 和 python .net等常用的开发环境)
 这里写图片描述

2 执行Excel解析

创建一个文件为exceldemo.js.var xlsx = require("node-xlsx");var fs = require('fs');var list = xlsx.parse("Camp.xlsx");//console.log(JSON.stringify(list));console.log(list);writeFile("all.json",JSON.stringify(list));function writeFile(fileName,data){    fs.writeFile(fileName,data,'utf-8',complete);  function complete(err)  {      if(!err)      {          console.log("文件生成成功");      }     } }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

成代码输入后,进行对代码测试。进行运行终端,输入 node exceldemo.js。代码很简洁,但是我们不难发现内部做了很多的工作。这些工作也帮助我们简化了Excel生成json的操作。对项目数据进行定制需求有一些作用。我们还可以使用批量读取一个文件内的所有Excel文件进行批量化处理。这些数据将有助于我们制定符合项目业务的数据内容。
这里写图片描述

3 导出JSON数据

Excel 导出JSON 在游戏开发中经常做的一件事,策划会在Excel表填写相应的数值数据,让前端根据数值配置表进行读取。前端能利用直接读取Excel访问到Excel的数据,但是这样的方式不够轻量化,解析的时间会增加。因此在业务上不适合这样的直接做法。然而各大公司会根据这样的方式配置读取他们的数据,方式是各种各样,核心一点是映射表格里面的数据提供使用满足到开发的定制需求。
下面我们做一个案例,我们先创建一个Excel表格,里面前三行用于填写一些相关的数据,用于解析使用。第一行名称,只是显示使用,第二是数据类型,第三是字段名称。其中数据类型,可以是我们熟悉整形,浮点型,字符串,还可以是数组。目前我们先支持整形,浮点型 和字符串。三个足够我们应付这个案例。

这里写图片描述

接下来,我们会根据上面的代码块进行进一步解析。var xlsx = require("node-xlsx");var fs = require('fs');var list = xlsx.parse("Camp.xlsx");praseExcel(list);//解析Excelfunction praseExcel(list){    console.log("qqq");    for (var i = 0; i < list.length; i++)     {         var excleData = list[i].data;         var sheetArray  = [];         var typeArray =  excleData[1];         var keyArray =  excleData[2];        for (var j = 3; j < excleData.length ; j++)        {             var curData = excleData[j];             if(curData.length == 0) continue;             var item = changeObj(curData,typeArray,keyArray);             sheetArray.push(item);        }        if(sheetArray.length >0)         writeFile(list[i].name+".json",JSON.stringify(sheetArray));    }   console.log("qqq");}//转换数据类型function changeObj(curData,typeArray,keyArray){     var obj = {};    for (var i = 0; i < curData.length; i++)     {        //字母         obj[keyArray[i]] = changeValue(curData[i],typeArray[i]);      }    return obj;}function changeValue(value,type){    if(value == null || value =="null") return ""    if(type =="int") return Math.floor(value);    if(type =="Number") return value;    if(type =="String") return value;  }//写文件function writeFile(fileName,data){    fs.writeFile(fileName,data,'utf-8',complete);  function complete(err)  {      if(!err)      {          console.log("文件生成成功");      }     } }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

执行命令,生成一个json文档。
 这里写图片描述

打开后, 生成对应文档。可以看到字段和相应的数据都匹配对应上了。
 这里写图片描述

4 批量化导出JSON数据

到了这个时候,只是导出一个文件操作。这一点往往不足以完成常规的工作。如果希望想导出更多文件,这个时候就要考虑到批量化的操作完成多表的操作。

5  最后

从案例来讲,这个库可以满足到一两个表来导出,至于复杂的表格和设计还是需求探讨。以及使用过程当中是否有一些不可抗拒的bug 还是要在使用项目中一点点碰。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/truhfcg/article/details/86640911