Чтение Excel в .NET - некоторые столбцы читаются как нулевые - PullRequest
3 голосов
/ 15 июля 2011

Я пытаюсь прочитать некоторые данные из 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 ]

5 голосов
/ 15 июля 2011

Вам необходимо включить Extended Properties="Excel 8.0;IMEX=1;" в строку подключения.Excel пытается определить тип данных ваших столбцов, читая первые несколько строк.Как только он думает, что знает тип данных, все, что не соответствует этому, приводится к NULL.Очень надоедливый.IMEX=1 говорит, что читает ваши данные как смешанные и должен решить вашу проблему.Если у вас есть строка заголовка, вам также следует рассмотреть возможность включения HDR=YES.Смотрите эту ссылку: http://www.connectionstrings.com/excel для получения дополнительной информации.

1 голос
/ 15 июля 2011

Возможно, тип столбца определен неправильно. По умолчанию поставщик Jet считывает 8 первых строк, чтобы определить тип столбца. И если эти 8 строк содержат что-то неправильное, вы получите проблему.

Это можно изменить, установив параметр TypeGuessRows в реестре.

...