Need help with xlsx2json?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

koalaylj
492 Stars 159 Forks MIT License 136 Commits 10 Opened issues

Description

让excel支持复杂的json格式(对象,数组,数字,boolean,字符串),将xlsx文件转成json。

Services available

!
?

Need anything else?

Contributors list

# 172,209
TypeScr...
C#
Shell
90 commits
# 336,646
JavaScr...
Shell
HTML
13 commits
# 478,928
JavaScr...
Shell
3 commits
# 512,086
JavaScr...
Shell
2 commits
# 388,132
CSS
HTML
Shell
2 commits
# 576,587
JavaScr...
Shell
1 commit

xlsx2json (English Document)

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

使用说明

  • 目前只支持.xlsx格式,不支持.xls格式。
  • 本项目是基于nodejs的,所以需要先安装nodejs环境。
  • 执行命令 ```bash

    Clone this repository

    git clone https://github.com/koalaylj/xlsx2json.git

    Go into the repository

    cd xlsx2json

    Install dependencies

    npm install ```

  • 配置config.json ```javascript { "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

    如果一个表格某一列是

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

    比如上图中的

    表1
    boss#{}
    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邮箱告诉我。

    We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.