错误重现:

-----------------------------------------------------------------------

在导入Excel读取数据时,其中的一个字段保存的值有如下格式:"2011072014","20110Aad10","25124Adfa","例子asdfadf"  这样的 混合了 "字母/数字/中文"数据, 在Excel表格中的前 8条 或 前 8+ 条数据中的 这个列中的数据都是 由纯数字组成的,如"2011072012","2011072013","2011072014",到了大于8行的时候的该列的数据组成变成了 数字+中文 + 字母的组合,这样就会出现取不到该列值的问题

错误原因:

-----------------------------------------------------------------------

Excel读取数据列的格式 是按照每一列前8个数据的类型来判断读写时的类型的。比如前8个数据有3个是字幕,5个是数字,那么这一整列都是以数字型来读的,类型最多的那么不管第8条之后是什么类型,都当作这个类型来读取,那些字母都读不了。

使用Microsoft.Jet.OLEDB.4.0读取数据会出现当某一字段内分别含有文本和数字的混合数据时,某一类型的数据会产生丢失。

产生这种问题的根源与Excel ISAM[3](Indexed Sequential Access Method,即索引顺序存取方法)驱动 程序的限制有关,Excel ISAM 驱动程序通过检查前几行中实际值确定一个 Excel 列的类型,然后选择能够代表其样本中大部分值的数据类型 [4]。也即Excel ISAM查找某列前几行(默认情况下是8行),把占多的类型作为其处理类型。例如如果数字占多,那么其它含有字母等文本的数据项 就会置空;相反如果文本居多,纯数字的数据项就会被置空。 
  现具体分析在第1节程序代码Extended Properties项中的HDR
和IMEX所代表的含义。HDR用来设置是否将Excel表中第一行作为字段名,“YES”代表是,“NO”代表不是即也为数据内容;IMEX是用来告诉
驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。

当我们设置IMEX=1时将强制混合数据转换
为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行
为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。 
  另一个改进的措施是IMEX=1与注册表
值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过
修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的该注册表值来更
改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有
1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。

在sql server用法

SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="E:\数据.xls";
User ID=Admin;Password=;Extended properties=''Excel 8.0;HDR=YES;IMEX=1''')

-----------------------------------------------------------------------

在项目中加入如下代码,自动修改注册表!

RegistryKey reg_TypeGuessRows = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Jet\4.0\Engines\Excel");
reg_TypeGuessRows.SetValue("TypeGuessRows", );

原帖:http://www.haogongju.net/art/2188339

最新文章

  1. SQLSERVER基础语句(一)
  2. Redis在windows下安装过程
  3. Spring官网jar包下载方法
  4. sqoop的命令行操作
  5. set集合类型 redis
  6. 如何安装php?
  7. 关于Switch结构利用
  8. delphi TreeView修改选中的节点的颜色和背景
  9. docker on Mac
  10. Velocity源码分析
  11. C语言当中的作用域
  12. Spring之AOP二
  13. [Luogu 2062]分队问题
  14. 【14】-java的单例设计模式详解
  15. 实现在WebView中返回上一级
  16. 【题解】Hanoi双塔问题
  17. 使用Managed Extensibility Framework方便的扩展应用程序
  18. 机器学习中几种优化算法的比较(SGD、Momentum、RMSProp、Adam)
  19. SpringMVC介绍及参数绑定
  20. Chapter 3 软件项目管理

热门文章

  1. win10 开机黑屏只显示鼠标
  2. linux下tomcat的shutdown命令杀不死进程
  3. (转)css3-box-sizing属性详解
  4. iPhone 6 Screen Size and Web Design Tips
  5. python二进制相关
  6. Orchard中codegen相关命令
  7. Bootstrap学习应用
  8. RegExp
  9. excel导出
  10. 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录,