excel文件倒入数据库数字被转为科学计数法解决办法

  最近需要将excel文件倒入数据库,发现数字很大的时候,会被转为科学计数的格式倒入,就是1.39785e+010此类的格式,其实这个数据是个手机号码,但是发现有些也是手机号码,但是被没有被转为科学计数法,可能是excel中设置过此单元格以text(文本)形式显示,而被转为科学计数法的单元格以数字显示。

excel文件倒入数据库数字被转为科学计数法解决办法

  也真够无语的了,谁这么无聊设置了单元格的显示格式。之前碰到这个单元格手机号被转为科学计数时,驱动用的是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文件倒入数据库数字被转为科学计数法解决办法
评论(0)Web开发网
阅读(200)喜欢(0)不喜欢(0)SQL及数据库