1

我正在尝试使用 VB.net 从 Excel 电子表格中导入一些数据

我的步骤是:

首先用户将文件上传到服务器

然后我想从服务器读取文件然后填充一个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$]"

谢谢!

4

3 回答 3

2

在查询中使用$工作表名称中的 a:

"select * from [NSTS$]"
于 2011-04-19T16:06:51.350 回答
1

您的 c:\excel\ 路径不是本地路径,而是运行应用程序的本地路径。

如果您从本地计算机运行此应用程序,为了映射 c:\excel\ 路径,您应该将服务器驱动器映射到您的 Windows 并使用该驱动器名称或使用 \\excel 作为路径值。

于 2011-04-19T16:04:23.953 回答
1

首先 - 你知道文件被保存到服务器路径的确切位置吗?我首先对路径进行硬编码,以确保没有其他任何奇怪的事情发生。

查看您的代码,您将文件保存在此处...

FileUpload1.SaveAs(Server.MapPath("~/") & 文件路径)

所以...首先,你确定它保存在那里吗?如果是这样,那么看看你在哪里用这个调用读取文件......

                ReadExcel(filepath)

你有没有尝试过 -

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

于 2011-04-19T16:05:39.630 回答