从 Excel 导入数据 - VB.NET
Posted
技术标签:
【中文标题】从 Excel 导入数据 - VB.NET【英文标题】:Importing data from Excel - VB.NET 【发布时间】:2011-04-19 15:59:29 【问题描述】:我正在尝试使用 VB.net 从 Excel 电子表格中导入一些数据
我的步骤是:
首先用户将文件上传到服务器
然后我想从服务器读取文件然后填充网格视图
这就是我所拥有的:
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$]"
谢谢!
【问题讨论】:
【参考方案1】:在查询中的工作表名称中使用$
:
"select * from [NSTS$]"
【讨论】:
【参考方案2】:您的 c:\excel\ 路径不是本地路径,而是运行应用程序的本地路径。
如果您从本地计算机运行此应用程序,为了映射 c:\excel\ 路径,您应该将服务器驱动器映射到您的 Windows 并使用该驱动器名称或使用 \\excel 作为路径值。
【讨论】:
【参考方案3】:首先 - 您知道文件保存在服务器路径上的确切位置吗?我会首先对路径进行硬编码,以确保没有其他异常情况发生。
查看您的代码,您将文件保存在此处...
FileUpload1.SaveAs(Server.MapPath("~/") & 文件路径)
那么...首先,您确定它保存在那里吗?如果是这样,那么看看你在哪里读取这个调用的文件......
ReadExcel(filepath)
你试过了吗-
ReadExcel(Server.MapPath("~/") & filepath)?
【讨论】:
以上是关于从 Excel 导入数据 - VB.NET的主要内容,如果未能解决你的问题,请参考以下文章
我正在将 348k 行数据从 Excel 导入到 VB.net SQL。我得到这个错误:超时已过期
如何使用 vb.net 将 excel 文件导入 sql server