WPS单元格格式由常规转为文本的一点坎坷
1.问题引入
通过WPS导入数据至数据库,其中一些单元格的内容是数字,在数据库查看某些相应的数据值,其值都被截断了,只保留了一位数字。
2.问题分析
通过本地调试,发现通过POI工具解析WPS中内容时一些数字是采用科学计数法的,通过不同的数据对比分析,若数字位数长度在8位以内的都是十进制数展示的,若数字位数长度大于或等于8位了,那么它就会采用科学计数法;而在Java后端逻辑处理的时候根据点号来截取取整了,导致科学计数法的数据小数点后部分数值被丢失了。
3.问题处理
目前有两种策略来修改,一是通过修改后端代码,支持对科学计数法的解析;另外一种是通过修改WPS模板,将单元格的格式改为文本。由于是在产线环境,所以暂时通过修改模板来解决。
3.1单元格常规格式时数字的展示
3.2单元格文本格式时数字的展示
通过上述处理后,在后端还是获取到科学计数法方式的数据,仍旧没有解决问题。此时,你需要双击格式修改过的单元格,然后让该单元格失去焦点,此时在该单元格的左上角会出现一个小三角形,然后你再选中它,在左边会出现一个黄色感叹号,如下图所示:
经过上述操作后,点击保存,然后导入该文件数据,此时后端获取到的数据不再是科学计数法形式了。在这里有一点不太明白,为啥给单元格设置文本样式后,还需要双击它,做了这一步操作后,后端解析数据时才是十进制形式的数字,对此有点不理解。
4.问题小结
这次的问题的产生,主要是没有考虑到这些场景。此次记录,以便后续不再犯类似错误。
阅读是一种修养,分享是一种美德。