C# 解决导出Excel长数字变成10次幂

RookieCoderAdu / 2023-08-03 / 原文

在做项目的时候遇到一个bug,当 编号(仅针对纯数字)长度达到一定长度,比如超过11位之后,导出Excel后就转换成了 10的幂次方。

这是Excel特有的转换,而且当数字的位数达到15,以后的数字就会全部转化成0,造成精度的缺失。

这显然是不符合要求的。

 

原始的赋值代码是这样的。

dr["编号"] = dt.Rows[i]["编号"].ToString();

读取DataTable的每一行,然后赋值,很常规的操作。

 

解决方案:

在导出的编号前面加上一个 英文引号(')

就像这样

dr["案件公文号"] = "'" + (dt.Rows[i]["案件公文号"]).ToString();

那么导出到文档之后显然会保留原有的编号,因为这相当于是将纯数字转换成了字符串。而字符串显然是不会出现这个问题。

 

那么好处是:

当我们双击单元格,并点击回车的时候,前面的引号就会消失,转化成一个绿色的标记,这显然是可以接受的。

如图