我想用vb.net读取一个excel文件,并根据它具有的数据获取一个字符串列表列表。数据将始终被构造为具有5列和N行数的表,第一行为标题。
这将在Windows窗体应用程序中完成。我已经看到假设此人已经安装了Excel的示例。但是,我必须考虑到他们可能没有的事实。
我如何在vb.net中做到这一点?如果我使用的是python,我知道我可以简单地使用Pandas并轻松完成它。有没有简单的方法可以做到这一点?
谢谢!
答案 0 :(得分:0)
我使用数据表提取工作表名称,因为在我的应用程序中,用户正在上传各种工作表,但我不知道工作表名称。您可能可以跳过这一步,以“ dim cmd”开始
Dim FileName As String = Application("WebRoot") & "\uploads\1.xlsx"
Dim cn As OleDbConnection = New OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & FileName & "';Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";")
cn.Open()
Dim dt As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
cn.Close()
cn = Nothing
Dim Source As String = dt.Rows(0)!TABLE_NAME.ToString().Replace("'", "")
dt.Dispose()
dt = Nothing
'all the above just to get the sheetname (source)
Dim cmd As New OleDbCommand
cmd.Connection = New OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & FileName & "';Extended Properties=""Excel 8.0;HDR=No"";")
cmd.CommandText = "select * from [" & Source & "]"
cmd.Connection.Open()
Dim sb As New StringBuilder
Dim rd As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
rd.Read 'skip the header row
Do While rd.Read
'0 is columnA, 1 is columnB, and so on
'so below will append the text in columnB to the stringbuilder
sb.Append(rd(1).toString & VbCrLf)
Loop
'Not sure what you want to do with the string?