大家在工作中会遇到一些需要使用excel表格中的数据的情况,但是excel中的数据很难直接用在编程中,比如本人在工作中就需要使用保险公司提供的费率表来进行保费计算,需要把表格变成json格式,但是一些软件不能完全随心所欲的变成自己需要的数据形式,下面我就介绍一种自认为还不错的方法与大家分享。首先,我先拿出一个表格,表格中不同的条件对应不同的数据,现在想要获得某一性别,某一年龄,某个期间的特定的数据。首先是用nan\nv来分别代表男性和女性,其次是用age_1代表一岁,year_1代表一年依次类推,例如一个一岁的男性在一年缴费期间的情况下对应的保费即需要交的钱为123.5块,则表示为{“nan.year_1.age_1”:123.5
},初始表格如下图一。
图片一
现在先在第二行下面插入两行用来定义需要的字段(这个大家可以根据具体的需要具体定),在这个表中就分别定义为如下图二所示。
图片二
下面开始进入正题(注:在开始拼接字符串之前先要创建一个新的Sheet工作页并且将原来表中的数据复制到这个Sheet中,在这个新的Sheet页面中进行操作,这是因为如果在原表中直接拼接字符串是会报循环引用的错误的,具体可参考下图三)。以此为例应该显示为"nan.year_1.age_0":120,
这是json数据的第一项,所以应该点击B5
这一项然后开始在上面的输入框里输入IF函数。首先是看一下引用表格的名称,比如本例中表格的名称即为“费率表”如下图三所示。然后以这个为名使用IF函数,IF函数的语法为if(a=1,b=2,b=3)
如果a=1
成立则b=2
否则b=3
(注:因为excel版本的问题如果出现图四中这样的报错,则将if
函数中的分隔符从,
变成;
,即为if(a=1;b=2;b=3)
)。现在以B5
不为空为条件(条件可以灵活选取),成立则拼接字符串,不成立为空。首先进行IF函数的条件拼接,(费率表!B5<>""
),其中(费率表!
)的含义是指B5这一栏是名字叫(费率表)的表中的格子,(B5<>""
)的含义是B5不为空,其中的(<>
)符号为不等于的意思。然后选择最开始的一个数据来拼接字符串,本表就为("nan.year_1.age_0":120,
)。首先拼冒号前的部分("""&B$3&B$4&"age_"&$A5"""
),其中&符号为拼接符用来使各个字符拼接在一起,$
符号表示对数据区域的绝对引用,即(B$3
)中对3绝对引用,无论将这一公式套用到表中的哪个格子中都会是(*3)的模式即无论哪一列情况下总是在第3行,同理($A5
)就是无论哪一行的情况下总是在A列,为什么必须在正确的地方使用$
符号,这一点将在下面的部分解释,其中的冒号使用(”:“)表示,冒号后面的值当然就是(费率表!B$5
),IF条件不成立时即如果B5为空的情况为(”“)。现输入框中的函数整体为(= IF(费率表!B5<>" ",""""&B$3&B$4&"age_"&$A5&""""&":"&费率表!B5&","," ")
),因为冒号前的部分为字符串格式所以需要用引号引起来导致两边加上一对引号,然后点击左边的fx或者√都可以执行函数,结果如图五所示。
图片三
图片四
图片五
从图五可以看到,原来的120.0现在变成(“nan.year_1.age_0”:120,)
即达到了我们想要的效果。现在让这个函数适用于所有的格子,只需要选中(“nan.year_1.age_0”:120,)
这一个格子将鼠标移动到当前这个格子的右下角,鼠标就会变成一个实体的黑十字,然后按住鼠标左键向右拖动就会使第一行全部适用函数,然后再从每一行第一个格子使用同样方法向下拖动就会使整个表格全部实现想要的效果。效果如图片六和图片七所示(注:显示不全拖动表格拓展即可看到效果,另外,在这里就可以看到如果在&B$3
中没有使用$
符号的话向下拉动时B列不能够保证函数一直引用的是第3行和第4行的信息即不能保证为nan.year_1
这种格式,在$A5
中同样不能保证向右拉动时一直引用A列的数据)。
图片六
图片七
最后,选中整个表格中的数据部分,复制到json
格式编辑器中(这里我使用的是HBuilder),然后在最前面加上{
,在最后面一个去掉,
加上}
,然后整理代码格式,即可得到想要的json
数据,具体效果如图八所示(注:这里只截取了一部分)。
图片八
希望此文可以帮助大家解决一些问题,见识粗浅,文中疏漏之处还请大家批评指正。