22> 让excel支持复杂的json格式, 将xlsx文件转成json。
33
44### 更新日志
5- > 本次大版本更新为不兼容更新,不兼容部分涉及对象列、对象数组列和数组列。
6- * 2018-6-5 v1.0.0
7- * feature: sheet名字以` ! ` 开头则不导出此表。
8- * feature: 列名字以` ! ` 开头则不导出此列。
9- * feature: 对象列支持对象嵌套,写法和JS中对象写法一致。
10- * feature: 数组可嵌套数组和对象,和JS中数组写法一致(除了最外层不需要写中括号[ ] )。
11- * fix: 去掉自定义数组分隔符。
12- * fix: excel单元格空的时候json中无此列的key。
13- * modify: 去掉对象数组列类型,统一为数组。
14- * modify: 去掉无用依赖,更新依赖库,精简代码。
5+ * 2018-6-8 v1.1.0
6+ - feature: 外键功能支持。
7+ - feature: 引入了一个新的库,更新(` git pull ` )完需要运行下` npm install ` 安装依赖。
8+ - fix: 少量bug修复。
159
1610### 分支
1711
@@ -53,7 +47,12 @@ npm install
5347 " dest" : " ./json"
5448 },
5549
56- " ts" : false ,// 是否导出d.ts(for typescript)
50+ /**
51+ * 是否导出d.ts(for typescript)
52+ * 一张表格只导出一个d.ts文件
53+ * true:压缩,false:不压缩(便于阅读的格式)
54+ */
55+ " ts" : false ,//
5756
5857 " json" : {
5958 /**
@@ -70,10 +69,10 @@ npm install
7069 * 执行` node index.js -h ` 查看使用帮助。
7170 * 命令行传参方式使用:执行 node ` index.js --help ` 查看。
7271
73- #### 示例1(参考./excel/test .xlsx)
72+ #### 示例1 基本功能 (参考./excel/basic .xlsx)
7473![ excel] ( ./docs/image/excel-data.png )
7574
76- 输出如下(因为设置了id列,输出hash map格式,如果无id列则输出数组格式 ):
75+ 输出如下(因为设置了 ` #id ` 列,输出 ` JsonHash ` 格式,如果无 ` #id ` 列则输出数组格式 ):
7776
7877``` json
7978{
@@ -112,15 +111,67 @@ npm install
112111}
113112```
114113
114+ 如果将第一列的` id#id ` 换成` id#string ` 则会输出` JsonArray ` 格式:
115+
116+ ``` json
117+ [
118+ {
119+ "id" : " 1111" ,
120+ "name" : " 风暴之灵" ,
121+ "slogen" : [" 风暴之灵已走远" ," 在这场风暴里没有安全的港湾啊,昆卡!" ],
122+ "skill" : {
123+ "R" : {
124+ "name" : " 残影" ,
125+ "冷却时间" : [3.5 ,3.5 ,3.5 ,3.5 ],
126+ "作用范围" : 260 ,
127+ "主动技能" : true ,
128+ "levels" : [
129+ {"level" : 1 ,"damage" : 140 ,"mana" : 70 },
130+ {"level" : 2 ,"damage" : 180 ,"mana" : 80 }
131+ ]
132+ },
133+ "E" : {
134+ "name" : " 电子漩涡" ,
135+ "冷却时间" : [21 ,20 ,19 ,18 ],
136+ "主动技能" : true ,
137+ "levels" : [
138+ {"level" : 1 ,"time" : 1 ,"cost" : 100 ,"distance" : 100 },
139+ {"level" : 2 ,"time" : 1.5 ,"cost" : 110 ,"distance" : 150 }
140+ ]
141+ }
142+ }
143+ },
144+ {
145+ "id" : " 1112" ,
146+ "name" : " 幽鬼" ,
147+ "slogen" : null ,
148+ "skill" : null
149+ }
150+ ]
151+ ```
152+
153+ ### 示例2 复杂表格拆分(参考./excel/master-slave.xlsx)
154+
155+ ![ excel] ( ./docs/image/master-slave.png )
156+
157+ 如果一个表格某一列是` #[] ` 或者` #{} ` 类型的时候,防止表格过于复杂,可将主表拆分。如上图所示。
158+
159+ 比如上图中的 ` 表1 ` 中 ` boss#{} ` 和 ` reward#[] ` 列比较复杂,可以将之拆为三个表:` 表2、3、4 ` ,将` 表1 ` 中的 ` boss#{} ` 拆成` 表3 ` ,` 表1 ` 中的` reward#[] ` 拆成表4。` 表2 ` 为主表,` 表3、4 ` 为从表。
160+
161+
162+
115163### 支持以下数据类型
116164
117- * number 数字类型。
118- * boolean 布尔。
119- * string 字符串。
120- * date 日期类型。
121- * object 对象,同JS对象一致。
122- * array 数组,同JS数组一致。
123- * id 主键类型(当表中有id类型时,json会以hash map格式输出,否则以数组格式输出)。
165+ * ` number ` 数字类型。
166+ * ` boolean ` 布尔。
167+ * ` string ` 字符串。
168+ * ` date ` 日期类型。
169+ * ` object ` 对象,同JS对象一致。
170+ * ` array ` 数组,同JS数组一致。
171+ * ` id ` 主键类型(当表中有id类型时,json会以hash格式输出,否则以array格式输出)。
172+ * ` id[] ` 主键数组,只存在于从表中。
173+
174+
124175
125176### 表头规则
126177
@@ -129,18 +180,40 @@ npm install
129180* 数字类型:命名形式 ` 列名#number ` 。
130181* 日期类型:` 列名#date ` 。日期格式要符合标准日期格式。比如` YYYY/M/D H:m:s ` or ` YYYY/M/D ` 等等。
131182* 布尔类型:命名形式 ` 列名#bool ` 。
132- * 数组:命名形式 ` 列名#[] ` 。
133- * 对象:命名形式 ` 列名#{} ` 。
134- * 主键:命名形式` 列名#id ` ,设置此将会输出为hash map 格式,否则为数组格式。
183+ * 数组:命名形式 ` 列名#[] ` 。
184+ * 对象:命名形式 ` 列名#{} ` 。
185+ * 主键:命名形式` 列名#id ` ,表中只能有一列。
186+ * 主键数组:命名形式` 列名#id[] ` ,表中只能有一列,只存在于从表中。
135187* 列名字以` ! ` 开头则不导出此列。
136188
189+
190+
191+ ### sheet规则
192+
193+ - sheet名字以` ! ` 开头则不导出此表。
194+ - 从表的名字 ` 从表名字@主表名字 ` ,主表必须在从表的前面。
195+
196+
197+
198+ ### 主从表相关规则(master/slave)
199+
200+ - master表必须是hash类型,即必须有` #id ` 列。
201+ - slave表名字 ` slave名字@master名字 ` ,master表的顺序必须在slave表的前面。
202+ - slave表中必须要有` #id ` 列或者` #id[] ` 列。
203+ - 如果将master表中的` #{}列 ` 拆分,则slave表中应为` #id ` ,值为master表的id。
204+ - 如果将master表中的` #[]列 ` 拆分,则slave表中应为` #id[] ` ,值为master表的id。
205+ - 具体请看示例` ./excel/master-salve.xlsx ` 。
206+
207+
208+
137209### 注意事项
138210
139211* 解析excel字符串的时候用到` eval() ` 函数,如果生产环境下excel数据来自用户输入,会有注入风险请慎用。
140- * 关键符号都是英文半角符号,和JS中一致。
141- * 对象写法同JS中对象写法一致。
142- * 数组写法同JS中数组写法一致(只是最外层数组不需要写中括号[ ] )。
143- * sheet名字以` ! ` 开头则不导出此表。
212+ * 关键符号都是英文半角符号,和JSON要求一致。
213+ * 对象写法同JavaScript中对象写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。
214+ * 数组写法同JavaScript中数组写法一致(不会JS的同学可理解为JSON的key不需要双引号其他和JSON一样)。
215+
216+
144217
145218### TODO
146219
0 commit comments