C# Extended Properties=\“Excel 12.0;HDR=YES;IMEX=1导入excel不能正确读取数据

ADO.NET读取Excel数据时,发现有的数据读出来为空,有的数据可以正确读取。
为此,打开excel表格,发现有的读不出是因为加入了除去数字之外的其他字符,网上了好些内容,最后才搜出来问题的原因,及其解决的方法。如下:

先了解下HDR和IMEX:
1、HDR=YES表示excel的第一行为标题行,不把它作为数据使用,因此,如果HDR的值设为NO,则说明第一行不是标题行,作为数据使用。系统默认是YES。参数Excel 8.0 对于Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0。
2、IMEX(IMport EXport mode)的三种模式:
IMEX=0:输出模式,这个模式开启的 Excel 档案只能用来做“写入”用途。
 IMEX=1:输入模式,这个模式开启的 Excel 档案只能用来做“读取”用途。
 IMEX=2:链接模式(完全更新能力),这个模式开启的 Excel 档案可同时支持“读取”与“写入”用途。

问题的描述及出现的原因:
问题描述:C#项目使用OLEDB读取excel时,会出现某些数据读不出来的问题,读出是空白,查看excel文件,在出现问题的这一列中,字符串格式和数字格式两种同时存在,如果全部改成数字,则不会出现问题,当某个单元格中出现了除数字以外的其他字符,则不能正确显示单元格中的内容。

出现的原因:IMEX=1时将单元格内容混合数据强制转换为文本类型,但只能确保在某列前8行数据至少有一个是文本项的时才起作用。若某列前8行数据全为纯数字,则它仍以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。

问题解决:
premise:IMEX=1
方法一:在混合列中,在所有单元格内容的最前面“ ’ ”
方法二:修改项目所在机器的注册表值TypeGuessRows,其值决定了程序从前几条数据采样确定数据类型,默认为“8”。修改“HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel”下的该TypeGuessRows值来更改采样行数。若设为0,将分析所有数据行。
如下图所示:
在这里插入图片描述
注意:Excel表数据列是单一数据类型还是混合数据类型,是由取样行决定而不由整列数据决定。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值