Giter VIP home page Giter VIP logo

xlsx2json's Introduction

xlsx2json (English Document)

让excel支持复杂的json格式, 将xlsx文件转成json。

使用说明

  • 目前只支持.xlsx格式,不支持.xls格式。
  • 本项目是基于nodejs的,所以需要先安装nodejs环境。
  • 执行命令
# Clone this repository
git clone https://github.com/koalaylj/xlsx2json.git
# Go into the repository
cd xlsx2json
# Install dependencies
npm install
  • 配置config.json
{
    "xlsx": {
        /**
         * 表头所在的行,第一行可以是注释,第二行是表头
         */
        "head": 2,

        /**
         * xlsx文件所在的目录
         * glob配置风格
         */
        "src": "./excel/**/[^~$]*.xlsx",

        /**
         * 导出的json存放的位置
         */
        "dest": "./json"
    },

    /**
     * 是否导出d.ts(for typescript)
     * 一张表格只导出一个d.ts文件
     * true:生成d.ts,false:不生成
     */
    "ts":false,

    "json": {
      /**
       * 导出的json是否需要压缩
       * true:压缩,false:不压缩(便于阅读的格式)
       */
      "uglify": false
    }
}
  • 执行export.sh|export.bat即可将./excel/*.xlsx 文件导成json并存放到 ./json 下。json名字以excel的sheet名字命名。

  • 补充(一般用不上):

    • 执行node index.js -h 查看使用帮助。
    • 命令行传参方式使用:执行 node index.js --help 查看。

示例1 基本功能(参考./excel/basic.xlsx)

excel

输出如下(因为设置了#id列,输出JsonHash格式,如果无#id列则输出数组格式):

{
  "1111": {
    "id": 1111,
    "name": "风暴之灵",
    "slogen": ["风暴之灵已走远","在这场风暴里没有安全的港湾啊,昆卡!"],
    "skill": {
      "R": {
        "name": "残影",
        "冷却时间": [3.5,3.5,3.5,3.5],
        "作用范围": 260,
        "主动技能": true,
        "levels": [
          {"level": 1,"damage": 140,"mana": 70},
          {"level": 2,"damage": 180,"mana": 80}
        ]
      },
      "E": {
        "name": "电子漩涡",
        "冷却时间": [21,20,19,18],
        "主动技能": true,
        "levels": [
          {"level": 1,"time": 1,"cost": 100,"distance": 100},
          {"level": 2,"time": 1.5,"cost": 110,"distance": 150}
        ]
      }
    }
  },
  "1112": {
    "id": 1112,
    "name": "幽鬼",
    "slogen": null,
    "skill": null
  }
}

如果将第一列的id#id换成id#string则会输出JsonArray格式:

[
  {
    "id": "1111",
    "name": "风暴之灵",
    "slogen": ["风暴之灵已走远","在这场风暴里没有安全的港湾啊,昆卡!"],
    "skill": {
      "R": {
        "name": "残影",
        "冷却时间": [3.5,3.5,3.5,3.5],
        "作用范围": 260,
        "主动技能": true,
        "levels": [
          {"level": 1,"damage": 140,"mana": 70},
          {"level": 2,"damage": 180,"mana": 80}
        ]
      },
      "E": {
        "name": "电子漩涡",
        "冷却时间": [21,20,19,18],
        "主动技能": true,
        "levels": [
          {"level": 1,"time": 1,"cost": 100,"distance": 100},
          {"level": 2,"time": 1.5,"cost": 110,"distance": 150}
        ]
      }
    }
  },
   {
    "id": "1112",
    "name": "幽鬼",
    "slogen": null,
    "skill": null
  }
]

示例2 复杂表格拆分(参考./excel/master-slave.xlsx)

excel

如果一个表格某一列是#[] 或者#{}类型的时候,防止表格过于复杂,可将主表拆分。如上图所示。

比如上图中的 表1boss#{}reward#[]列比较复杂,可以将之拆为三个表:表2、3、4,将表1中的 boss#{}拆成表3表1中的reward#[]拆成表4。表2为主表,表3、4为从表。

支持以下数据类型

  • number 数字类型。
  • boolean 布尔。
  • string 字符串。
  • date 日期类型。
  • object 对象,同JS对象一致。
  • array 数组,同JS数组一致。
  • id 主键类型(当表中有id类型时,json会以hash格式输出,否则以array格式输出)。
  • id[] 主键数组,只存在于从表中。

表头规则

  • 基本数据类型(string,number,bool)时候,一般不需要设置会自动判断,但是也可以明确声明数据类型。
  • 字符串类型:命名形式 列名#string
  • 数字类型:命名形式 列名#number
  • 日期类型:列名#date 。日期格式要符合标准日期格式。比如YYYY/M/D H:m:s or YYYY/M/D 等等。
  • 布尔类型:命名形式 列名#bool
  • 数组:命名形式 列名#[]
  • 对象:命名形式 列名#{}
  • 主键:命名形式列名#id ,表中只能有一列。
  • 主键数组:命名形式列名#id[],表中只能有一列,只存在于从表中。
  • 列名字以!开头则不导出此列。

sheet规则

  • sheet名字以开头则不导出此表。
  • 从表的名字 从表名字@主表名字,主表必须在从表的前面。

主从表相关规则(master/slave)

  • master表必须是hash类型,即必须有#id列。
  • slave表名字 slave名字@master名字,master表的顺序必须在slave表的前面。
  • slave表中必须要有#id列或者#id[]列。
  • 如果将master表中的#{}列拆分,则slave表中应为#id,值为master表的id。
  • 如果将master表中的#[]列拆分,则slave表中应为#id[],值为master表的id。
  • 具体请看示例./excel/master-salve.xlsx

注意事项

  • 解析excel字符串的时候用到eval()函数,如果生产环境下excel数据来自用户输入,会有注入风险请慎用。
  • 关键符号都是英文半角符号,和JSON要求一致。
  • 对象写法同JavaScript中对象写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。
  • 数组写法同JavaScript中数组写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。
  • 如果导出的JSON文件尾行出现value都是null的数据,可能是因为excel中数据没删除干净,看控制台打印的行数据条目数和实际符不符合可判定。

TODO

  • 将主分支的代码合并到npm分支。

分支

  • master为主分支,此分支用于发布版本,包含当前稳定代码,不要往主分支直接提交代码。
  • dev为开发分支,新功能bug修复等提交到此分支,待稳定后合并到master分支。
  • 如需当做npm模块引用请切换到npm分支(尚有功能未合并,暂时不可用)。

补充

  • 可在windows/mac/linux下运行。
  • 项目地址 xlsx2json master
  • 如有问题可以到QQ群内讨论:223460081
  • 招募协作开发者,有时间帮助一起维护下这个项目,可以发issue或者到qq群里把你github邮箱告诉我。

xlsx2json's People

Contributors

dongdongcpk avatar highkay avatar jiajunfeng avatar nextzeus avatar zk-luke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xlsx2json's Issues

是否存在数据量限制

excel表格如果行数太多,比如几万行,是不是就会导致解析报错啊?我这边好像遇到这个问题了,有办法解决吗?

有需要C#版导出的或者更多数值强制类型支持的,可以看看我基于此框架修改的版本

项目地址:https://github.com/suxf/xlsx2json
目前发现问题就会修复,使用的是作者最后一次版本更新的源码。
除了原来支持的功能,以及修复了一些小问题。

①此外还更新了c#版本的支持,会自动导出配置以及一个加载单例。

②修改和简化了一些写法,比如不导出!改为~或者留空(等一些简化特性)。

③为了适应c#变量类型增加了基础数值类型比如int,int64,float等等

④对导出工具本身做了指引性配置,简化部署难度。

欢迎使用~✌

日期类型错误

当excel表中的列如果是日期类型,会导致node-xlsx插件解析出来的时间是utc时间,是特别操蛋的一长串字符串而不是期望的原样字符串,导致没法后续处理。
期待node-xlsx导出日期类型的列的时候不要做改变,直接按照字符串原样导出。

行列导出问题

如果excel只有3行3列,比如之前在5行5列的那个位置添加东西然后又删除了,有可能会导致node-xlsx插件认为这个表格是5行5列,就会导出出错。

导出来的id#id,不是number类型?

你好,工具很好用,有个问题问下,这个类型是正确的么?

表格如下:

1ae54e63-3620-4287-96c9-1ab718d53a57

导出数据如下,id是string类型。

{
"1": {
"id": "1",
"name": "怪物1",
"lv": 1,
"str": 0,
"agi": 0,
"pow": 0,
"ene": 0,
"hp": 100,
"mp": 0,
"minDam": 10,
"maxDam": 31,
"defence": 11,
"doubleAtt": 0,
"realDam": 1,
"att_interval": 0.2,
"icon_path": "monster/0"
},
"2": {
"id": "2",
"name": "怪物2",
"lv": 2,
"str": 0,
"agi": 0,
"pow": 0,

合并单元格支持

测试发现对于合并单元格的列,导出后都是null值。比如把3-6列合并,统一命名为“foo”,那么导出后,这样的层级结构会得到null值。有好的解决办法吗

是我的配置有问题吗?

{
"xlsx": {
"head": 1,
"src": "./excel/llt.xlsx",
"dest": "./json",
"arraySeparator": ","
},
"json": {
"uglify": false
}
}

#date parsed error

最后一个日期类型,总是被parsed为1970-01-01 08:00:43


ID | 时间戳 | 时间戳
-- | -- | --
id | time | time1#date
1 | 2018/7/9 00:15 | 2018/7/9 00:15

[
  {
    "id": 1,
    "time": "2018-07-09 00:15:00",
    "time1": "1970-01-01 08:00:43"
  }
]

Json-》excel

你好,请问这个支不支持复杂json数组的excel展示呢?

Unable to parse array of strings without quotes

Excellent tool. I had used it a year ago. Now the same XLSX file does not parse due to lack of quotes in the string-array fields. Is there a config-option to make it backward compatible?

./export.sh 
parsing excel: myXLSfile.xlsx
  * sheet:  sheetName
undefined:1
([a,b,c])
  ^
ReferenceError: a is not defined
    at eval (eval at parseJsonObject (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:10:10), <anonymous>:1:3)
    at eval (<anonymous>)
    at parseJsonObject (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:10:10)
    at parseRow (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:236:24)
    at parseSheet (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:137:22)
    at workbook.forEach.sheet (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:332:26)
    at Array.forEach (<anonymous>)
    at Object.parseWorkbook (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/parser.js:316:14)
    at Object.toJson (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/lib/xlsx-to-json.js:169:34)
    at files.forEach.item (/Users/mohideennoordeen/Downloads/ProKanjiMigration/xlsx2json-master/index.js:63:14)

是否支持#id[{}]

Name#id 和 Name#[{}] 单独使用功能都是正常的,但在一起使用的时候会出现问题。

使用Name#id生成的数据是一个对象,如

{
“Human":{},
"Animal":{}
}
//需要生成的是下面这个对象数组
[
{
"Name":“Human"
},
{
"Name":“Animal"
}
]

如果使用#id[{}]可以生成对象数组,但主键列不会出现在生成的json文件里,命令行也会发出警告。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.