在.NET中读取Excel - 某些列读入为null

时间:2011-07-15 19:13:11

标签: vb.net export-to-excel

我正在尝试从excel中读取一些数据:

If (FileUpload1.PostedFile.ContentType = "application/vnd.ms-excel") Then
                Dim filename As String = Path.GetFileName(FileUpload1.FileName)
                'Session("userid") & "-" & Date.Now()
                filepath = "\excel\" & Session("userid") & "_" & Now.Date().ToString("Mdy") & "_" & filename
                FileUpload1.SaveAs(Server.MapPath("~/") & filepath)
                ReadExcel(filepath)

            Else
                StatusLabel.Text = "Only Excel file types are accepted"
            End If
似乎一切都很好,除非其中一列有时读入为NULL。如果它是一个不同的类型,似乎会发生这种情况。  我无法弄清楚它是什么。有人帮我请....

Sub ReadExcel(ByVal filepath As String)
    Dim MyConnection As System.Data.OleDb.OleDbConnection
    Dim DtSet As System.Data.DataSet
    Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & Server.MapPath("~/") & filepath & "';Extended Properties=Excel 8.0;")

    DtSet = New System.Data.DataSet
    Try
        MyCommand.Fill(DtSet)
        'gwResults.DataSource = DtSet.Tables(0)
        LoopSources(DtSet)
        'gwResults.DataBind()
        MyConnection.Close()
    Catch ex As Exception
        StatusLabel.Text = "Import Excel status: The file could not be loaded. The following error occured: <br>" + ex.Message
    End Try

End Sub

2 个答案:

答案 0 :(得分:5)

您需要在连接字符串中包含Extended Properties="Excel 8.0;IMEX=1;"。 Excel尝试通过读取前几行来确定列的数据类型。一旦它认为它知道数据类型,任何不符合该类型的东西都被强制为NULL。很烦人。 IMEX=1告诉它将您的数据作为混合读取,并应解决您的问题。如果您有标题行,则还应考虑包含HDR=YES。有关详细信息,请参阅此链接:http://www.connectionstrings.com/excel

答案 1 :(得分:1)

可能错误地确定了列的类型。默认情况下,Jet提供程序会读取8个第一行以确定列的类型。如果这8行含有错误,你就会遇到问题。

可以通过在注册表中设置TypeGuessRows设置来更改。