[英]Reading from Excel sheet
I have written the code below to read data from an Excel sheet and display data in a combobox in Visual Basic.我编写了下面的代码来从 Excel 工作表中读取数据并在 Visual Basic 的组合框中显示数据。
However, when I click "run" nothing is displayed.但是,当我单击“运行”时,什么也没有显示。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim MyConnection As New OleDb.OleDbConnection
Dim MyCommand As New OleDb.OleDbCommand
Dim filePath, sql As String
filePath = "C:\Users\Nour\Desktop\projects\grade10\grade10\atlas.xlsx"
sql = "Select continent from [Sheet1]"
MyConnection.ConnectionString = $"Provider= Microsoft.Jet._OLEDB 11.0;data source = {filePath};Extended_Properties=Excel 8.0"
MyConnection.Open()
MyCommand.Connection = MyConnection
MyCommand.CommandText = sql
Dim da As New OleDb.OleDbDataAdapter
da.SelectCommand = MyCommand
Dim dt As New DataTable
da.Fill(dt)
Me.ComboBox1.DataSource = dt
Me.ComboBox1.DisplayMember = dt.Columns(0).ToString
MyConnection.Close()
Try this code试试这个代码
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim fname As String = "C:\Users\Nour\Desktop\projects\grade10\grade10\atlas.xlsx"
Dim connectionStringTemplate As String = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source={0};" + "Extended Properties=""Excel 12.0;HDR=Yes"""
Dim connectionString As String = String.Format(connectionStringTemplate, fname)
Dim sqlSelect As String = "SELECT * FROM [Sheet1$];"
Dim workbook As DataSet = New DataSet()
Dim excelAdapter As System.Data.Common.DataAdapter = New System.Data.OleDb.OleDbDataAdapter(sqlSelect, connectionString)
excelAdapter.Fill(workbook)
Dim worksheet As DataTable = workbook.Tables(0)
ComboBox1.DataSource = worksheet
Me.ComboBox1.DisplayMember = worksheet.Columns(0).ToString
End Sub
To read an xlsx file, rather than an xls file, you will need the ACE provider instead of the JET provider.要读取 xlsx 文件而不是 xls 文件,您将需要ACE 提供程序而不是 JET 提供程序。 You need to add the Extended Property "HDR=Yes" to tell it there is a header row.您需要添加扩展属性“HDR=Yes”以告诉它有一个标题行。
The name of a worksheet needs a $
after it.工作表的名称后面需要一个$
。
To make up a connection string, you can use a connectionstringbuilder - it will take care of adding any quotes or whatever is needed to create a valid connection string from the individual parts.要组成连接字符串,您可以使用 connectionstringbuilder - 它将负责添加任何引号或从各个部分创建有效连接字符串所需的任何内容。
A DataAdapter will open and close the connection for you. DataAdapter 将为您打开和关闭连接。
Some entities use unmanaged resources (ie they don't get automatically cleaned up after use) - they will have a .Dispose()
method which will release those resources.一些实体使用非托管资源(即它们在使用后不会自动清理)——它们将有一个.Dispose()
方法来释放这些资源。 Or you can use the Using
construct to have it taken care of for you.或者您可以使用Using
构造来为您处理它。
I used the ColumnName
property instead of ToString
as it is more obvious what it is.我使用了ColumnName
属性而不是ToString
因为它更明显。
I made a small Excel xlsx file to test with and used this program:我制作了一个小的 Excel xlsx 文件来测试并使用这个程序:
Imports System.Data.OleDb
Public Class Form1
Sub PopulateCB()
Dim filepath = "C:\temp\Continents.xlsx"
Dim csb As New OleDbConnectionStringBuilder
csb.Provider = "Microsoft.ACE.OLEDB.12.0"
csb.DataSource = filepath
csb.Add("Extended Properties", "Excel 12.0 Xml;HDR=YES")
Dim sql = "SELECT Continent FROM [Sheet1$]"
Dim dt As New DataTable
Using da As New OleDbDataAdapter(sql, csb.ConnectionString)
da.Fill(dt)
End Using
ComboBox1.DataSource = dt
ComboBox1.DisplayMember = dt.Columns(0).ColumnName
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PopulateCB()
End Sub
End Class
to get a combobox like this:获得这样的组合框:
First thing to check before going into code, compatibility between your database and your excel .在进入代码之前首先要检查数据库和 excel 之间的兼容性。 If you are using a 32bits excel version you will never be able to query a 64bits database.如果您使用的是 32 位 excel 版本,您将永远无法查询 64 位数据库。
Start with something simple, and then work up to more complex things.从简单的事情开始,然后再做更复杂的事情。
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open("c:\test1.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("sheet1")
'display the cells value B2
MsgBox(xlWorkSheet.Cells(2, 2).value)
'edit the cell with new value
xlWorkSheet.Cells(2, 2) = "http://vb.net-informations.com"
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
Make this work, and then add in a ComboBox object.完成这项工作,然后添加一个 ComboBox 对象。
http://vb.net-informations.com/excel-2007/vb.net_excel_2007_open_file.htm http://vb.net-informations.com/excel-2007/vb.net_excel_2007_open_file.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.