Импорт данных из Excel - VB.NET - PullRequest
1 голос
/ 19 апреля 2011

Я пытаюсь импортировать некоторые данные из электронной таблицы Excel, используя VB.net

Мои шаги:

сначала пользователь загружает файл на сервер

затем я хочу прочитать файл с сервера, чтобы затем заполнить gridview

это то, что у меня есть:

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
        Dim filepath As String = ""
        If FileUpload1.HasFile Then
            Try
                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

            Catch ex As Exception
                StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message
            End Try

        End If
    End Sub
    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='" & filepath & "';Extended Properties=Excel 8.0;")
        MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [NSTS]", MyConnection)
        MyCommand.TableMappings.Add("Table", "Net-informations.com")
        DtSet = New System.Data.DataSet
        MyCommand.Fill(DtSet)
        gwResults.DataSource = DtSet.Tables(0)
        MyConnection.Close()
    End Sub

ошибка происходит с «MyConnection», он попытался посмотреть на«C: /» вместо на сервере:

'c: \ excel \ 3_41911_Sample.xls' не является допустимым путем.Убедитесь, что путь указан правильно и что вы подключены к серверу, на котором находится файл.

как я могу установить соединение OleDb для получения исходного файла с сервера?

спасибо!


не берите в голову, я понял

я добавил: Server.MapPath ("~ /") & filepath и теперь он работает.однако теперь я получаю сообщение об ошибке: ядру базы данных Microsoft Jet не удалось найти объект 'NSTS'.Убедитесь, что объект существует, и что вы правильно написали его имя и путь.

NSTS - это имя моей первой электронной таблицы.Что я делаю неправильно?: (


мне не хватало знака доллара за штуку :) ааа, теперь все работает!

"select * from [NSTS$]"

спасибо!

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Используйте $ в имени вашего листа в запросе:

"select * from [NSTS$]"
1 голос
/ 19 апреля 2011

Во-первых, вы точно знаете, где на пути к серверу сохраняется файл? Я бы начал с жесткого кодирования пути, чтобы убедиться, что больше ничего не происходит.

Глядя на свой код, вы сохраняете файл здесь ...

FileUpload1.SaveAs (Server.MapPath ("~ /") и filepath)

Итак ... во-первых, ты уверен, что он там экономит? Если так, то посмотрите, где вы читаете файл с этим вызовом ...

                ReadExcel(filepath)

Вы пробовали -

ReadExcel (Server.MapPath ("~ /") и filepath)?

1 голос
/ 19 апреля 2011

Ваш путь c: \ excel \ path - это не локальный путь, а локальный путь к вашему приложению.

Если вы запускаете это приложение с локального компьютера, для сопоставления пути c: \ excel \ path необходимо либо подключить диск сервера к вашим окнам и использовать это имя диска, либо использовать \\ excel в качестве значения пути.

...