代码之家  ›  专栏  ›  技术社区  ›  Homam

我需要一个Excel猜测数据类型问题的解决办法

  •  6
  • Homam  · 技术社区  · 15 年前

    我有一个固定的excel文件模板,

    现在,当我试图通过Jet提供者导入数据ADO.Net-在Ole连接工具中,我发现了以下问题:有些列没有导入,因为它们的列[string和number]中有混合数据类型,

    我在网上找了这个问题,我发现原因是 guessing data types from Excel

    负载代码:

    connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0;");
    string columns = "P_ID, FULL_NAME_AR, job_no, GENDER, BIRTH_DATE, RELIGION, MARITAL_STATUS, NAT_ID, JOB_Name, FIRST_HIRE_DATE, HIRE_DATE, CONTRACT_TYPE, GRADE_CODE, QUALIFICATION";
    string sheetName = "[Emps$]";
    OleDbCommand command = new OleDbCommand(string.Format("select {0} from {1} where p_id is not null", columns, sheetName), connection);
    
    connection.Open();
    dr = command.ExecuteReader();
    DataTable table = new DataTable();
    table.Load(dr);
    

    我该怎么做才能告诉Excel停止猜测并将数据作为文本提供给我?

    如果没有,你能帮我解决问题吗?

    4 回复  |  直到 6 年前
        1
  •  8
  •   Homam    15 年前

    我通过为连接字符串添加IMEX=1找到了一个解决方案,但是它有一种特殊的格式,如下所述 link .

    IMEX参数用于混合使用数字和字母值的列。 以确定每个列要使用的数据类型。如果列被确定为数字 基于对前几行的扫描,则此列中具有alpha字符的任何行都将被删除 返回为空。IMEX参数(1是输入模式)强制列的数据类型为 以便正确处理字母数字值。

    当做

        2
  •  2
  •   Jordan Running    7 年前

    try
    {
        Console.Write(wsReader.GetDouble(j).ToString());
    }
    catch   //Lame unfixable bug
    {
        Console.Write(wsReader.GetString(j));
    }
    
        3
  •  1
  •   Fionnuala    15 年前

    你能从excel端工作吗?在Excel中运行的此示例将混合数据类型放入SQL Server表中:

    Dim cn As New ADODB.Connection
    
    scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
    & sFullName _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    
    cn.Open scn
    
    s = "SELECT Col1, Col2, Col3 INTO [ODBC;Description=TEST;DRIVER=SQL Server;" _
    & "SERVER=Some\Instance;Trusted_Connection=Yes;" _
    & "DATABASE=test].TableZ  FROM [Sheet1$]"
    cn.Execute s
    
        4
  •  1
  •   R. Schreurs Rohith    7 年前

    另一种解决方案是添加或更改设置 类型猜测行 在登记处。通过将其值设置为0,将扫描整个文档。

    “TypeGuessRows”=德沃德:00000000

    [HKEY\ U LOCAL\ U MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel] “TypeGuessRows”=德沃德:00000000

    这也将防止截断长度超过255个字符的文本数据。如果TypeGuessRows的数字大于0,并且第一个长度超过255个字符的文本超出该数字,则会发生这种情况。

    另请参见 Setting TypeGuessRows for excel ACE Driver

    推荐文章