参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
参数Excel 8.0
对于Excel 97以上版本都用Excel 8.0
IMEX ( IMport EXport mode )设置
意义如下:
0 ---输出模式;
1---输入模式;
2----链接模式(完全更新能力)
注:
我用连接字符串Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";Data Source=" + fPath
HDR=Yes就是第一行作为标题;IMEX=1就是汇入模式解决数字与字符混合情况。。。。。
sql命令字符串为:select 客户名称,来源,客户状态,成熟度,客户分类,主营行业,人员规模,年收入 from [客户资料$] where [客户名称] is not null
注:因为HDR=Yes,所以我的连接字符串才能这样写。
看起来很完美。。。但是实际情况是,有的数据明明有数据但是取出来却是空。
数据为空分为两种情况:
一:数字和字符混合的情况读取为空;二:数字以文本显示也读取为空。
原因猜测有二:
一:大概是因为HDR=Yes会影响IMEX=1读取数字和字符混合的读取。
二:因为ADO.NET会根据前10行(我忘了多少行了,大概值。)判断类型。前10行都是数字 就认为是数字类型。下面的行中出现文字内容就不认了!
解决方法:设置HDR=NO;IMEX=1,果然可以解决上面的两个问题。。
不过,我的sql命令字符串已经不能那样用了,因为第一行已经不认为是标题,而是数据了。。。。
所以我也修改了sql命令字符串:select F1,F2,F3,F4,F5,F6,F7,F8
然后在程序中去掉table中的第一行。。。。。。程序也就完成了。。。。。
等等。。。。。。。用sql命令字符串:select F1,F2,F3,F4,F5,F6,F7,F8
所以我就又在程序中加了几句代码:判断table中的第一行的第一列和第二列是不是要求的固定值。如果是移除第一行,如果不是return;
if (table.Rows[0][0].ToString().Equals("客户名称") && table.Rows[0][1].ToString().Equals("来源"))