excel文件倒入数据库数字被转为科学计数法解决办法
最近需要将excel文件倒入数据库,发现数字很大的时候,会被转为科学计数的格式倒入,就是1.39785e+010此类的格式,其实这个数据是个手机号码,但是发现有些也是手机号码,但是被没有被转为科学计数法,可能是excel中设置过此单元格以text(文本)形式显示,而被转为科学计数法的单元格以数字显示。
也真够无语的了,谁这么无聊设置了单元格的显示格式。之前碰到这个单元格手机号被转为科学计数时,驱动用的是Microsoft.Jet.OLEDB.4.0,而且也设置过IMEX=1,可能是驱动的问题。
于是更新到最新的office2007的Microsoft.ACE.OLEDB.12.0来读取excel文件就没有问题。(Microsoft.ACE.OLEDB.12.0其实也可以处理office2003/2000的excel文件,而不仅是xlsx文件,之前陷入这个误区,导致如果是xls就用Microsoft.Jet.OLEDB.4.0来处理,xlsx文件用Microsoft.ACE.OLEDB.12.0)。参考:excel 2007驱动字符串
/// <summary> /// 获取excel连接对象 /// </summary> /// <param name="ExcelPath">excel文件路径</param> /// <returns></returns> public static OleDbConnection GetOleCn(string ExcelPath) { bool xlsx = true;// ExcelPath.ToLower().EndsWith(".xlsx");//统一用最新的Microsoft.ACE.OLEDB.12.0驱动,而不是老版本的Microsoft.Jet.OLEDB.4.0 string driver = "Provider=" + (xlsx ? "Microsoft.ACE.OLEDB.12.0" : "Microsoft.Jet.OLEDB.4.0") + ";Data Source=" + ExcelPath + ";Extended Properties='Excel " + (xlsx ? "12" : "8") + ".0;HDR=No;IMEX=1;';Persist Security Info=True"; OleDbConnection cn = new OleDbConnection(driver); cn.Open(); return cn; }
参考1
近日,接到一个Excel导入需求,导入文件格式为xls 。心想这个简单,三下五除二就将新功能上线。一周后接到反馈说
导入数据有乱码。发现只要导入数字字符较长时oledb读出的记录数据会以科学计数法显示。解决方法只要在Excel上将字符转
换为文本即可。但是客户使用时可能是在许多文本或excel中复制粘贴,根本无法控制客户行为。
google查找结果说需要在连接字符串中增加“IMEX=1“可以改善问题。加入 “IMEX=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'";
来源:http://www.cnblogs.com/alein/archive/2008/11/04/1326604.html
参考2
在EXCEL中,输入超过11位数字时,会自动转为科学计数 的方式,比如:123456789012345,输入后就变成了:1.23457E14,Excle里可以更改此列的格式为文本。或者添加" ' " ,即 '123456789012345 。先输入一个英文单引号“'”,再输入数值。那么Excel就认为是文本了,而不会强制变为科学计数法。
用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'";
问题就解决了。来源:http://blog.163.com/china__xuhua/blog/static/199723169201371231324161/
加支付宝好友偷能量挖...
原创文章,转载请注明出处:excel文件倒入数据库数字被转为科学计数法解决办法