zoukankan      html  css  js  c++  java
  • 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;
                }

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

  • 相关阅读:
    [视频]想做你的Code
    Visual Studio 2010网剧第四集:《为爱Debug》
    jQuery之工具函数
    Visual Studio 2010网剧第二集《让爱延长》
    Visual Studio 2010网剧最终季:《让爱编译通过》
    【TDS学习文档1】入门
    【DB2学习文档之七】SQL for DB2
    【TDS学习文档5】IBM Directory schema的管理3——attributes
    【TDS学习文档2】概念理解
    【Linux使用】vsFTPd 服务器简明配置指南
  • 原文地址:https://www.cnblogs.com/605395451/p/2159749.html
Copyright © 2011-2022 走看看