2011-07-15 3 views
3

として読み込まれ、私は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 

答えて

5

接続文字列にExtended Properties="Excel 8.0;IMEX=1;"を含める必要があります。 Excelは、最初の数行を読み取って列のデータ型を決定しようとします。一度それがデータ型を知っていると思えば、それに従わないものは強制的にNULLになります。とてもうるさい。 IMEX=1は、あなたのデータを混在して読むよう指示し、問題を解決するはずです。ヘッダー行がある場合は、HDR=YESも考慮する必要があります。詳細については、このリンク:http://www.connectionstrings.com/excelを参照してください。

+0

新しい接続文字列:MyConnection =新しいSystem.Data.OleDb.OleDbConnection( "プロバイダー= Microsoft.Jet.OLEDB.4.0;データソース= '"&Server.MapPath( "〜/")&ファイルパス& "';拡張プロパティ= –

+1

問題はありません。私はあなたが苦しんでいると感じていますが、私はこの前に自分自身を考えなければなりませんでした。しかし、本当に欲しいのであれば私に感謝するために、あなたはいつもあなたの質問に答えることができました:)ハッピーコーディング! – mattmc3

+0

私は午前中にDBNullと戦っています。 –

1

おそらく、列の種類が正しく指定されていない可能性があります。デフォルトでは、Jetプロバイダは最初の8行を読み取り、列の種類を判断します。これらの8行に何か問題があると問題が発生します。

これは、レジストリにTypeGuessRows設定を設定することで変更できます。

関連する問題