nodejs:Excel导出json

来源:互联网 发布:拍淘宝静物用什么相机 编辑:程序博客网 时间:2024/06/10 16:04

开发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("文件生成成功");      }     } }

成代码输入后,进行对代码测试。进行运行终端,输入 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("文件生成成功");      }     } }

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

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

4 批量化导出JSON数据

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

5 最后

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

0 0