从excel导入数据表跳过最后一列值

我想从Excel文件导入数据到数据表。 但问题是最后一列值被忽略。 其余列的值是完美的。 我的excel文件包含这个:

在这里输入图像说明

导入datatable中的数据如下:

在这里输入图像说明

我的代码是这样的:

Dim connExcel As New OleDbConnection(constr) Dim cmdExcel As New OleDbCommand() Dim oda As New OleDbDataAdapter() Dim dt As New DataTable() cmdExcel.Connection = connExcel 'Read Data from First Sheet connExcel.Open() cmdExcel.CommandText = "SELECT * From [Sheet1$]" oda.SelectCommand = cmdExcel oda.Fill(dt) connExcel.Close() 

连接string如下:

 <add name="ExcelCon12" connectionString="Provider=Microsoft.JET.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0" /> <add name="ExcelCon4" connectionString="Provider=Microsoft.JET.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0"/> 

我究竟做错了什么?

我会认可这个确实是Excel / OleDb中的一个错误。 @ubaidashrafmasoody是正确的,今天我又转载了同样的行为。 另一个提供了答案,它可以通过设置来修复

Extended Properties="Excel 8.0;IMEX=1"

似乎不正确,因为我遇到了这个行为,这已经在我的连接string中设置。

bug的行为的细节是这样的(尽pipe可能是编辑:如果最后一列(大多数)在前几个(大概是8)行中有空单元格,那么该列不会出现在任何SQL语句的作用域中(这个在任何编辑之后都会自行修正,正如@ubaidashrafmasoody所描述的那样)。例如,如果我有五列,列1,列2,列3,列4和列5,其值(标题行中的列5除外)为空, 然后:

SELECT * From [Sheet1$]

只会返回4列。

如果我只列出四列,例如:

SELECT [Column1], [Column2], [Column3], [Column4] From [Sheet1$]

那么它会正确返回。 但是,如果我命名第五列:

SELECT [Column1], [Column2], [Column3], [Column4], [Column5] From [Sheet1$]

那么它会出错,并且没有指定[Column5]的参数值。 或者,没有括号,就没有这样的领域。

即使在SQL语句中明确指定范围:

SELECT [Column1], [Column2], [Column3], [Column4], [Column5] From [Sheet1$A1:E55]

要么

SELECT * From [Sheet1$A1:E55]

不能检索第五列。

然而,一个简单的“修复”是在这之后添加一个名为例如Column6的新空白列。 突然间,Column5变得可见,尽pipe它的NULL。

从你提供的代码的样子,我没有看到一个问题。 我相信这个问题是在专栏内的。 例如:混合值(bg123 | 1234)。 这一栏可以混合使用吗? 整数,string等? ADO.Net基于大多数值的列来selectDataType。 然后每个单元格转换为ADO.Netselect的types。 如果你有更多的整数比它将被转换为数字另一方面,如果不是它将被转换为string…

一种解决scheme是在连接string中使用ExtendedProperties ; 表明你正在导入数据。

尝试下面的方法…

  Extended Properties=""Excel8.0;IMEX=1""" 'This is to tell it to not care about the types...(mixed); be sure to include the `"` around the `ExtendedProperties` as well. 

你的连接string现在…

  "Provider=Microsoft.JET.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1"""