本文完整阅读约需 3 分钟,如时间较长请考虑收藏后慢慢阅读~

最近接触了一个项目,要求将表格导出为CSV文件,我使用了JS的csv-exportor组件导出CSV,然而导出的数据在Excel中打开却出现了长数字被截断为科学计数法的BUG。

0x01 前言

有一定Excel使用经验的读者一定知道,遇到这种情况应该做的是将数值类型转换为文字类型。然而CSV格式本身就只是由字符串和分隔符所组成,在导入Excel的时候也无法自由选择单元格的类型,含有数字的字符串会被Excel默认判断为数值。

0x02 解决思路

那么难道完全没有办法了吗?不一定!

我刚刚提到了Excel在导入CSV过程中存在的自动转换,完整转换规则如下:
– 含有字符的单元格会被自动转换为字符串
– 仅含有数字的单元格会被自动转换为数字
含有公式的单元格会被自动转换为公式

注意第三项自动转换规则:含有公式的单元格会被自动转换为公式,这也就意味着我们可以直接通过公式来解决仅含数字的字符串会被自动转换为数字类型,从而引起Excel自动截断长数字的问题!

0x03 解决方案

Excel中存在一个公式,可将当前单元格强制转换为字符串,那就是="String"公式。使用该公式后,所有使用该公式的单元格都会以字符串形式表示,之前提到的问题得以解决!

0x04 附

可能有的读者有疑问:为什么不用我们在Excel中常用的'单引号前缀实现强制声明字符类型呢?

其实这也是我最初所思考解决该问题的方案,然而当我尝试后发现该方法效果很糟糕,尽管解决了长数字被截断的问题,但也造成了本来就应该被转换为字符串的单元格前面多出来一个单引号,非常难看。