-
Excel导入数据的时候数字变科学计数法的解决方法
网络 2014/6/11 11:24:30在EXCEL中,输入超过11位数字时,会自动转为科学计数的方式,比如:123456789012345,输入后就变成了:1.23457E14。
1. Excle里可以更改此列的格式为文本,或者添加" ' " ,即 '123456789012345 。先输入一个英文单引号“'”,再输入数值。那么Excel就认为是文本了,而不会强制变为科学计数法。
2. 用c#的OLEDB导入Excel到数据库产生科学计数法问题解决 。
发现Excel的列中只要数字字符较长时oledb读出的记录数据会以科学计数法显示。450107630382345变为4.5010763038+14 。
主要问题在连接字符串:
"Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OLEDB的Excel的IMEX和HDR是什么意思?
Extended Properties=""Excel 8.0;HDR=yes;IMEX=1""
A: HDR ( HeaDer Row )设置
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
B:IMEX ( IMport EXport mode )设置
IMEX 有三种模式,各自引起的读写行动也不合,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full capabilities)
我这里希罕要申明的就是 IMEX 参数了,因为不合的模式代表著不合的读写行动:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用处。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用处。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时增援“读取”与“写入”用处。
所谓“4.5010763038+14 ”只是显示用的,实际还是“450107630382345”。所以使用读取即 IMEX=1时,得到“4.5010763038+14 ”。
而 IMEX=0时,得到“450107630382345”。
我们需要把连接字符串改为
"Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=0'";
问题就解决了。
经测试:此0模式会少数据。还是1比较正常,手机号可以设置为常规格式,才正常,如果文本格式会科学计算法,不知道什么原因。
解决办法:
用的excel读取驱动是Microsoft.Jet.OLEDB.4.0。查询相关文档发现此驱动似乎在2003年就已经停止更新。立刻上Microsoft网站下载最新驱动Microsoft.ACE.OleDb.12.0 此驱动安装无需重新启动,经过测试问题完美解决。
新驱动链接串如下"Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
阅读(1561) 分享(0)