{"id":23181827,"url":"https://github.com/zk-luke/xlsx2json","last_synced_at":"2025-04-04T16:14:42.417Z","repository":{"id":15959269,"uuid":"18701873","full_name":"zk-luke/xlsx2json","owner":"zk-luke","description":"convert excel to json ,support object/array/number/bool data type.","archived":false,"fork":false,"pushed_at":"2022-03-24T09:17:11.000Z","size":11105,"stargazers_count":563,"open_issues_count":14,"forks_count":175,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-03-28T15:07:43.451Z","etag":null,"topics":["excell","json"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zk-luke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-04-12T10:43:49.000Z","updated_at":"2025-03-05T03:11:20.000Z","dependencies_parsed_at":"2022-08-24T16:00:29.635Z","dependency_job_id":null,"html_url":"https://github.com/zk-luke/xlsx2json","commit_stats":null,"previous_names":["zk-luke/xlsx2json","koalaylj/xlsx2json"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk-luke%2Fxlsx2json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk-luke%2Fxlsx2json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk-luke%2Fxlsx2json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk-luke%2Fxlsx2json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zk-luke","download_url":"https://codeload.github.com/zk-luke/xlsx2json/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247208150,"owners_count":20901570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excell","json"],"created_at":"2024-12-18T08:18:42.200Z","updated_at":"2025-04-04T16:14:42.387Z","avatar_url":"https://github.com/zk-luke.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"### xlsx2json ([English Document](./docs/doc_en.md))\n\u003e 让excel支持复杂的json格式, 将xlsx文件转成json。\n\n### 使用说明\n* 目前只支持.xlsx格式，不支持.xls格式。\n* 本项目是基于nodejs的，所以需要先安装nodejs环境。\n* 执行命令\n```bash\n# Clone this repository\ngit clone https://github.com/koalaylj/xlsx2json.git\n# Go into the repository\ncd xlsx2json\n# Install dependencies\nnpm install\n```\n\n* 配置config.json\n```javascript\n{\n    \"xlsx\": {\n        /**\n         * 表头所在的行，第一行可以是注释，第二行是表头\n         */\n        \"head\": 2,\n\n        /**\n         * xlsx文件所在的目录\n         * glob配置风格\n         */\n        \"src\": \"./excel/**/[^~$]*.xlsx\",\n\n        /**\n         * 导出的json存放的位置\n         */\n        \"dest\": \"./json\"\n    },\n\n    /**\n     * 是否导出d.ts（for typescript）\n     * 一张表格只导出一个d.ts文件\n     * true:生成d.ts，false:不生成\n     */\n    \"ts\":false,\n\n    \"json\": {\n      /**\n       * 导出的json是否需要压缩\n       * true:压缩，false:不压缩(便于阅读的格式)\n       */\n      \"uglify\": false\n    }\n}\n```\n* 执行`export.sh|export.bat`即可将`./excel/*.xlsx` 文件导成json并存放到 `./json` 下。json名字以excel的sheet名字命名。\n\n* 补充(一般用不上)：\n    * 执行`node index.js -h` 查看使用帮助。\n    * 命令行传参方式使用：执行 node `index.js --help` 查看。\n\n#### 示例1 基本功能(参考./excel/basic.xlsx)   \n![excel](./docs/image/excel-data.png)\n\n输出如下(因为设置了`#id`列，输出`JsonHash`格式，如果无`#id`列则输出数组格式)：\n\n```json\n{\n  \"1111\": {\n    \"id\": 1111,\n    \"name\": \"风暴之灵\",\n    \"slogen\": [\"风暴之灵已走远\",\"在这场风暴里没有安全的港湾啊，昆卡！\"],\n    \"skill\": {\n      \"R\": {\n        \"name\": \"残影\",\n        \"冷却时间\": [3.5,3.5,3.5,3.5],\n        \"作用范围\": 260,\n        \"主动技能\": true,\n        \"levels\": [\n          {\"level\": 1,\"damage\": 140,\"mana\": 70},\n          {\"level\": 2,\"damage\": 180,\"mana\": 80}\n        ]\n      },\n      \"E\": {\n        \"name\": \"电子漩涡\",\n        \"冷却时间\": [21,20,19,18],\n        \"主动技能\": true,\n        \"levels\": [\n          {\"level\": 1,\"time\": 1,\"cost\": 100,\"distance\": 100},\n          {\"level\": 2,\"time\": 1.5,\"cost\": 110,\"distance\": 150}\n        ]\n      }\n    }\n  },\n  \"1112\": {\n    \"id\": 1112,\n    \"name\": \"幽鬼\",\n    \"slogen\": null,\n    \"skill\": null\n  }\n}\n```\n\n如果将第一列的`id#id`换成`id#string`则会输出`JsonArray`格式：\n\n```json\n[\n  {\n    \"id\": \"1111\",\n    \"name\": \"风暴之灵\",\n    \"slogen\": [\"风暴之灵已走远\",\"在这场风暴里没有安全的港湾啊，昆卡！\"],\n    \"skill\": {\n      \"R\": {\n        \"name\": \"残影\",\n        \"冷却时间\": [3.5,3.5,3.5,3.5],\n        \"作用范围\": 260,\n        \"主动技能\": true,\n        \"levels\": [\n          {\"level\": 1,\"damage\": 140,\"mana\": 70},\n          {\"level\": 2,\"damage\": 180,\"mana\": 80}\n        ]\n      },\n      \"E\": {\n        \"name\": \"电子漩涡\",\n        \"冷却时间\": [21,20,19,18],\n        \"主动技能\": true,\n        \"levels\": [\n          {\"level\": 1,\"time\": 1,\"cost\": 100,\"distance\": 100},\n          {\"level\": 2,\"time\": 1.5,\"cost\": 110,\"distance\": 150}\n        ]\n      }\n    }\n  },\n   {\n    \"id\": \"1112\",\n    \"name\": \"幽鬼\",\n    \"slogen\": null,\n    \"skill\": null\n  }\n]\n```\n\n### 示例2 复杂表格拆分(参考./excel/master-slave.xlsx)\n\n![excel](./docs/image/master-slave.png)\n\n如果一个表格某一列是`#[]` 或者`#{}`类型的时候，防止表格过于复杂，可将主表拆分。如上图所示。\n\n比如上图中的 `表1`中 `boss#{}`和 `reward#[]`列比较复杂，可以将之拆为三个表：`表2、3、4`，将`表1`中的 `boss#{}`拆成`表3`，`表1`中的`reward#[]`拆成表4。`表2`为主表，`表3、4`为从表。\n\n\n\n### 支持以下数据类型\n\n* `number` 数字类型。\n* `boolean`  布尔。\n* `string` 字符串。\n* `date` 日期类型。\n* `object `对象，同JS对象一致。\n* `array`  数组，同JS数组一致。\n* `id` 主键类型(当表中有id类型时，json会以hash格式输出，否则以array格式输出)。\n* `id[]` 主键数组，只存在于从表中。\n\n\n\n### 表头规则\n\n* 基本数据类型(string,number,bool)时候，一般不需要设置会自动判断，但是也可以明确声明数据类型。\n* 字符串类型：命名形式 `列名#string` 。\n* 数字类型：命名形式 `列名#number` 。\n* 日期类型：`列名#date` 。日期格式要符合标准日期格式。比如`YYYY/M/D H:m:s` or `YYYY/M/D` 等等。\n* 布尔类型：命名形式 `列名#bool` 。\n* 数组：命名形式  `列名#[]`。\n* 对象：命名形式 `列名#{}`。\n* 主键：命名形式`列名#id` ,表中只能有一列。\n* 主键数组：命名形式`列名#id[]`，表中只能有一列，只存在于从表中。\n* 列名字以`!`开头则不导出此列。\n\n\n\n### sheet规则\n\n- sheet名字以`！`开头则不导出此表。\n- 从表的名字 `从表名字@主表名字`，主表必须在从表的前面。\n\n\n\n### 主从表相关规则(master/slave)\n\n- master表必须是hash类型，即必须有`#id`列。\n- slave表名字 `slave名字@master名字`，master表的顺序必须在slave表的前面。\n- slave表中必须要有`#id`列或者`#id[]`列。\n- 如果将master表中的`#{}列`拆分，则slave表中应为`#id`，值为master表的id。\n- 如果将master表中的`#[]列`拆分，则slave表中应为`#id[]`，值为master表的id。\n- 具体请看示例`./excel/master-salve.xlsx`。\n\n\n\n### 注意事项\n\n* 解析excel字符串的时候用到`eval()`函数，如果生产环境下excel数据来自用户输入，会有注入风险请慎用。\n* 关键符号都是英文半角符号，和JSON要求一致。\n* 对象写法同JavaScript中对象写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。\n* 数组写法同JavaScript中数组写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。\n* 如果导出的JSON文件尾行出现value都是null的数据，可能是因为excel中数据没删除干净，看控制台打印的行数据条目数和实际符不符合可判定。\n\n\n### TODO\n- [ ] 将主分支的代码合并到npm分支。\n\n### 分支\n* `master`为主分支,此分支用于发布版本，包含当前稳定代码，不要往主分支直接提交代码。\n* `dev`为开发分支,新功能bug修复等提交到此分支，待稳定后合并到`master`分支。\n* 如需当做npm模块引用请切换到`npm`分支(尚有功能未合并，暂时不可用)。\n\n\n### 补充\n* 可在windows/mac/linux下运行。\n* 项目地址 [xlsx2json master](https://github.com/koalaylj/xlsx2json)\n* 如有问题可以到QQ群内讨论：223460081\n* 招募协作开发者，有时间帮助一起维护下这个项目，可以发issue或者到qq群里把你github邮箱告诉我。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzk-luke%2Fxlsx2json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzk-luke%2Fxlsx2json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzk-luke%2Fxlsx2json/lists"}