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

我正在创建一个实用程序,用于将数据从Excel导入Oracle数据库,

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

现在,当我尝试通过Jet提供程序和ADO.Net – Ole连接工具导入数据时,我发现了以下问题:由于列中存在混合数据类型,因此尚未导入某些列[string和数字],

我在互联网上寻找这个问题我发现原因是从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 STOP GUESSING并将数据作为文本提供给我?

如果没有,你能帮我解决一下吗?

提前致谢

我通过为连接字符串添加IMEX = 1找到了一个解决方案,但是有一个特殊的格式,它在以下链接中描述 。

IMEX参数适用于使用混合数字和Alpha值的列。 Excel驱动程序通常会扫描前几行,以确定要为每列使用的数据类型。 如果根据前几行的扫描确定列是数字,则此列中包含字母字符的任何行都将返回为Null。 IMEX参数(1是输入模式)强制列的数据类型为文本,以便正确处理字母数字值。

问候

你能从excel端工作吗? 在Excel中运行的此示例将混合数据tyoe放入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 

这不完全正确! 显然,如果前8行是空白的,Jet / ACE总是采用字符串类型,无论IMEX = 1,并且如果前8行是数字,则总是使用数字类型(同样,无论IMEX = 1)。 即使我在注册表中将行读取为0,我仍然遇到同样的问题。 这是让它发挥作用的唯一可靠方法:

 try { Console.Write(wsReader.GetDouble(j).ToString()); } catch //Lame unfixable bug { Console.Write(wsReader.GetString(j)); }