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

时间:2015-01-15 05:06:52

标签: asp.net vb.net excel import datatable

我正在尝试将数据从excel文件导入到datatable。但问题是跳过了最后一列的值。其余列的值是完美的。我的excel文件包含:

enter image description here

在datatable中导入数据后如下:

enter image description here

我的代码如下:

  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()

Connections Strings如下:

<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"/>

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为这确实是Excel / OleDb中的错误。 @ubaidashrafmasoody是正确的,我今天再现了同样的行为。另一个提供了答案,可以通过设置

来修复

Extended Properties="Excel 8.0;IMEX=1"

似乎不正确,因为我在连接字符串中已经设置了这种行为。

错误行为的细节是这样的(虽然编辑可能:如果非常LAST列在前几行(可能是8行)中有(多数)空单元格,那么该列不会出现在范围内任何SQL语句。(在某些编辑之后,这个任意修复,就像@ubaidashrafmasoody描述的那样。)例如,如果我有五列,Column1,Column2,Column3,Column4和Column5,带有值(标题中的Column5除外)行)空白,然后:

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]

无法检索第五列。

然而,一个简单的“修复”是添加一个名为eg的新空白列。在此之后的第6列。突然,Column5变得可见,尽管它是NULL。

答案 1 :(得分:0)

从您提供的代码的外观来看,我没有看到问题。我相信这个问题属于专栏本身;例如:混合值(bg123 | 1234)。这个专栏可以混合使用吗?整数,字符串等? ADO.Net基于列选择DataType,尤其是从大多数值中选择。然后将每个单元格转换为ADO.Net选择的类型。如果你有更多的整数,那么另一方面它将被转换为数字,如果不是,它将被转换为字符串...

一种解决方案是在连接字符串中使用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.

您的连接字符串现在......

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