ADO.NET操纵Excel 标点符号 数字和字符混合问题! HDR=Yes;IMEX=1

C# ADO.NET操纵Excel

参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES

参数Excel 8.0
对于Excel 97以上版本都用Excel 8.0

IMEX ( IMport EXport mode )设置

  IMEX 有三种模式,各自引起的读写行为也不同,容後再述:

  0 is Export mode

  1 is Import mode

  2 is Linked mode (full update capabilities)

  我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:

  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

意义如下:

0 ---输出模式;
1---输入模式;
2----链接模式(完全更新能力)

注:  IMEX=1 解决数字与字符混合时,识别不正常的情况。经过我的验证IMEX的默认值为2,INEX=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  from [客户资料$] where F1 is not null

    然后在程序中去掉table中的第一行。。。。。。程序也就完成了。。。。。

等等。。。。。。。用sql命令字符串:select F1,F2,F3,F4,F5,F6,F7,F8  from [客户资料$] where F1 is not null   来读取Excel。。。那不是不能判断数据用户导入的数据是不是符合要求规范。。。。

所以我就又在程序中加了几句代码:判断table中的第一行的第一列和第二列是不是要求的固定值。如果是移除第一行,如果不是return;

    if (table.Rows[0][0].ToString().Equals("客户名称") && table.Rows[0][1].ToString().Equals("来源"))
            {
                table.Rows.RemoveAt(0);//移除第一行
            }
            else
            {
                MessageBox.Show("您选择的客户名单文件不符合规范!请使用正规文件!\n", "有情提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                return;
            }

 注:我是偷懒,,其实应该把第一行你需要的所有数据都要判断一下

原文地址:https://www.cnblogs.com/605395451/p/2159749.html