本文源自工作场景实践,具有一定的参考意义,分享给大家。
发现问题
财务的资深美女主管近日找到我,说她的Excel表格出现了奇怪的问题,百思不得其解,求帮助。英雄救美的故事每天都在发生,虽然我不是英雄,但救美还是不容错过的。
闲话少说,直入正题。因为原始表格数据众多,为便于展示,我们把有问题的数据直接拷贝到新的表格里重现问题并展示解决问题的过程。数据如下:

我们知道迷你图主要展示数据的总的趋势变化,而无法体现真正的数据间的差异大小。还不了解迷你图的可以学习一下相关知识。她的本意就是做个迷你图来展示数据的趋势变化。上面的几组数据目测都是一样,下面的迷你图应该是等高的。但无论怎么检查设置都如上图所示。
原因排查
首先怀疑格式的问题,反复检查确认所有格式都为常规格式,调整为数值也一个样。强制数据转换:

求和操作也显示数据没有问题。

调整小数位数,数据也没有问题。

比较大小显示数据也没问题:

直接在D1单元格手动输入38000,正常!由于类似的情况很多,显然一个一个修改不太现实。还是得找到真正的原因。

不愧为工作了二十多年的资深财务人员,说以上这些常规的操作都已经排查过一遍了。再次检查也没有发现什么问题,面面相觑陷入懵逼状态。
AI时代,有问题免不了问问AI,回馈的信息无非就是表格刷新问题啦,设置问题啦,一一照做并没能解决问题,放弃!另寻思路。至于说可能的BUG笔者认为基本不可能。微软卧虎藏龙,这个问题会是BUG?这个好像比买彩票的机率都低😊。
开始怀疑表格本身的问题,将数据拷贝出来,无论带不带格式问题依旧。进一步询问数据表格来源,得知此表格数据由某ERP系统导出而来。根据过去的经验有种直觉还是数据本身的问题。
根据迷你图的特点及图示,D列的实际数据应该是比其他列数值小才有可能出现这种情况。
Excel批量快速导出图片
IT实践社,公众号:IT实践社Excel批量快速导出图片
在作者以前的Excel批量快速导出图片一文中我们讲过新版的Excel文件实质上是个压缩包,决定从文档内部探个究竟。用解压缩软件打开Excel文档,我们的表格数据实质上是存放在xl这个文件夹下。

进入下级文件夹,一直找到worksheets目录,就看到我们数据表的原始数据了,就是sheet1.xml,名字也是我们在工作簿中看到的名字。

双击打开,终于看到庐山真面目了!D1单元格的真实数据如图所示。

虽然我们在Excel中看到的是38000,但是迷你图实际参考的是单元格的真实数据,这就是问题所在。
为什么会出现这种情况呢?下面我们来详细剖析。
Excel内部采用双精度浮点数存储数据,只能保证15位有效数字。当小数数值位超过15位(包含小数点前后的数字)时会自动四舍五入,当非常接近整数时,Excel可能自动按显示格式进行舍入。分两种情况举例说明:
1、手动输入时,如果超过15位,超出的部分直接截断。如果增加小数位数显示,后面直接显示为0。经测试,单元格超输入的数字在解压的xml数据里并不完全保留,只多出2位并与超输入的数字并不匹配。有兴趣的可以验证一下。

2、如果是外部程序或软件生成的Excel表格数据,xml格式里的数据可能超过15位,比如我们这位同事的数据。

经测试,如果xml数据里面的位数超过15位,Excel在显示时会把第15位后面的进行四舍五入处理。比如以上数据实际显示为38000,这就是导致以上问题的原因。实际上迷你图是以真实的数据计算统计的。知道问题所在,解决起来就容易了。
解决方案
1、直接修改xml数据,操作上一般是解压出数据表的数据后,用文本编辑器直接修改替换就好。当然这个我们并不推荐,我们只作为验证问题及研究的目的。当然这个方法一般也只有在表格有问题无法打开时可以作为提取数据的一个可选项。
2、在Excel表格直接输入正确数据,如果少量几组可以手工进行。如果较多我们可以对问题数据用Round进行四舍五入的操作。参考下图。

总结
以上场景不一定会经常碰到,但各种系统生成的表还是有可能出现的。但一旦碰到没有思路可能会觉得匪夷所思不知所措。以上案例至少给我们一种思路,有些问题可以查看原始xml数据查找原因。以上供各位参考研究,如有不当之处敬请指正。