2011-07-15 56 views
3

我試圖從Excel中的一些數據如下:閱讀Excel中的.NET - 一些列讀取爲空

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 

回答

5

您需要包括Extended Properties="Excel 8.0;IMEX=1;"您的連接的字符串中。 Excel會嘗試通過讀取前幾行來確定列的數據類型。一旦它認爲它知道數據類型,任何不符合該數據類型的內容都被強制爲NULL。很煩人。 IMEX=1指示它以混合形式讀取您的數據,並應解決您的問題。如果您有標題行,則還應考慮包括HDR=YES。看到這個鏈接:http://www.connectionstrings.com/excel欲瞭解更多信息。

+0

新的連接字符串:MyConnection = New System.Data.OleDb.OleDbConnection(「provider = Microsoft.Jet.OLEDB.4.0; Data Source ='」&Server.MapPath(「〜/」)&filepath & "'; Extended Properties = 'Excel 8.0; HDR = Yes; IMEX = 1;'「)現在可以工作了!謝謝!!! –

+1

沒問題,我覺得你很痛苦,因爲前段時間我不得不想出這個問題,但是,如果你真的想要感謝我,你可以隨時將你的問題標記爲答案:)快樂的編碼! – mattmc3

+0

我一直在和DBNull作鬥爭,謝謝! –

1

列的類型可能不正確。默認情況下,Jet提供程序讀取8個第一行以確定列的類型。如果這8行含有錯誤,你會遇到問題。

這可以通過在註冊表中設置TypeGuessRows設置進行更改。