近日,有朋友发现自己用Excel登记身份证信息时,身份证号码居然被excel偷偷篡改了后3位(修改为0了)。导致他录入了半天的身份证有一大半都是错误的数据,只有带字母的没事。就算他采用复制粘贴的方式依然会错误,不太懂计算机的人彻底蒙圈了,但懂计算机的人很容易就发现问题了。
1、问题原因根据微软官方文档说明,微软在设计excel时,遵循了有关如何存储和计算浮点数的 IEEE 754 规范。 因此,Excel 在数字中就只存储了 15 位有效位数,并将第十五位后的数字更改为零。这就很好地解释了为什么全数字的身份证号码会被篡改后3位的问题了。
至于带字母的身份证号码为什么没事,也很好解释。因为在一长串数字中加入了字母后,excel就不再认为它是数字,转而认为它是一个Unicode字符串。这个Unicode字符串在excel顶底层存储时unsigned short数据类型,最大可以包含32767个字符的Unicode字符串。所以,excel单元格最大可以输入32767个字符,但在工作表上最多只能显示1024个字符。
2、解决办法要解决这个问题,有两种方法:
①、输入长数字之前,在单元格中增加输入一个单引号“ ’ ”。这样excel就自动将长串数字转存为Unicode字符串了。
②、输入长数字之前,先将单元格的数据格式主动设置为“文本”格式。这样,你输入的长串数字也就被excel当作文本信息来存储了。
除了上面的解决方法外,我们还要养成一个好习惯。那就是做完表格,一定要抽样检查一下。以免出现问题,造成不可挽回的后果。
3、副作用以上两种方法虽然都能成功解决问题,但是也会带来副作用。那就是都会把这个单元格的数据当作字符串来存储,后续如果再用这个信息当作源数据来进行数学计算的话,excel容易出错,有时候会在结果单元格直接显示公式给你。因为字符串不是数字,excel自动识别过元数据和计算公式时容易识别错误。
excel为了避免未知的错误,会在该单元格上的左上方出现绿色小三角标记作提醒。如果将鼠标移动过去,你会看到黄色叹号提醒。会提醒你“该单元的内容为文本格式或者前面有单引号” ’ “。我们看到这样单元格,就尽量不要用它来做计算了。
总结微软的excel虽然做得很好,但这些注意事项也还真的是要非常注意,不然因为软件不正确的使用导致你交付的文件有问题就得不偿失了。