Access与Excel的数据导入导出是我们经常要使用的功能。下面就列出我们常用的三种方法
一、直接使用Insert Into SQL语句,将EXCEL表数据导入到指定的数据库的指定表中
具体的工作表名 数据表名 以及相应的路径大家可按需修改
Dim cnn As ADODB.cnnection
Dim strSql As String
Set cnn = New ADODB.cnnection
cnn.cnnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source= d:\客户.xls;;Extended Properties='Excel 8.0;HDR=YES;IMEX=1' "
’如果是Access 2010 2013 2016 2019 或以上 连接字符串可改为:Provider=Microsoft.ACE.OLEDB.12.0;
cnn.Open
If cnn.State = adStateOpen Then
strSql = "Insert Into 客户表 Select * From [Excel 8.0;Database=d:\test.xls].[Sheet1$]"
Cnn.Execute strSql
MsgBox "已成功插入数据到Access中", , "Office中国"
cnn.Close
End If
Set cnn = Nothing
End Sub
二、使用ADO Recordset记录集 将Excel数据插入到Access数据库指定表中
Dim cnn As New ADODB.cnnection
Dim rs As New ADODB.Recordset
Dim strCon As String
strCon = "provider=Microsoft.jet.OLEDB.4.0;Data Source=d:\客户.mdb;"
cnn.Open strCon
rs.Activecnnection = cnn
rs.LockType = adLockOptimistic
rs.Open "客户表"
Dim sht As Worksheet
Dim lngRow As Long
Set sht = ThisWorkbook.Sheets("Sheet1")
For lngRow = 2 To 100 '从第2行--100行的数据
rs.AddNew
rs!客户ID = sht.Cells(lngRow, 1)
rs!客户名 = sht.Cells(lngRow, 2)
rs!客户地址= sht.Cells(lngRow, 3)
rs.Update
Next lngRow
MsgBox "Access导入Excel数据完成!",,"小辣椒高效Office"
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Set sht = Nothing
三、直接使用Access内置的DoCmd.TransferSpreadsheet命令
DoCmd.TransferSpreadsheet acImport, , "客户表", "d:\客户.xls", True, "Sheet1!"
DoCmd.TransferSpreadsheet命令的详细解释:
在 Visual Basic 中,TransferSpreadsheet 方法执行 TransferSpreadsheet 操作。
语法
expression.TransferSpreadsheet (TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)
expression:表示 DoCmd 对象的变量。
参数
名称 必需/可选 数据类型 说明
TransferType 可选 AcDataTransferType 你想要执行的传输类型。 默认值为 acImport。
SpreadsheetType 可选 AcSpreadSheetType 用于指明所要从中导入、导出到或链接到的电子表格的类型。
TableName 可选 Variant 字符串表达式,表示要向其中导入电子表格数据、从中导出电子表格数据或将电子表格数据链接到的 Office Access 表名称,或要将其结果导出到电子表格的 Access 选择查询名称。
FileName 可选 Variant 字符串表达式,表示要导入其中数据、将数据导出到其中或将数据链接到其中的电子表格的文件名和路径。
HasFieldNames 可选 Variant 如果指定 True (1),可以在导入或链接时将电子表格的行用作字段名称。 如果指定 False (0),可以将电子表格的行视为普通数据。 如果将此参数留空,假设使用的是默认值 (False)。 将 Access 表或选择查询数据导出到电子表格时,无论为此参数输入的值是什么,字段名称都会插入电子表格的行。
Range 可选 Variant 字符串表达式,表示电子表格中有效的单元格区域或区域名称。 该参数仅可用于导入。 若要导入整个电子表格,请将该参数保留为空。 导出到电子表格时,必须将该参数保留为空。 如果输入范围,则导出将失败。
UseOA 可选 Variant 不支持该参数。
注解
可以使用 TransferSpreadsheet 方法,在当前 Access 数据库或 Access 项目 (.adp) 和电子表格文件之间导入或导出数据。 还可以将 Excel 电子表格中的数据链接到当前 Access 数据库。 使用链接的电子表格,可以使用 Access 查看和编辑电子表格数据,同时仍支持对 Excel 电子表格程序数据的完全访问权限。 还可以链接到 Lotus 1-2-3 电子表格文件中的数据,但此类数据在 Access 中为只读。
备注
还可以使用 Recordset 对象的 ActiveConnection 属性,利用 ActiveX 数据对象 (ADO) 创建链接。
示例
下面的示例在 Lotus 电子表格 Newemps.wk3 的指定范围内将表导入到 Access 的“Employees”表。 它使用电子表格中的行作为字段名。
VB复制
DoCmd.TransferSpreadsheet acImport, 3, _
"Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"
以上就是Excel与Access交换数据的3种方法。
当然,如果是数据经常变化,也可在Access中直接使用链接表的方式链接到Excel的工作表,这样Excel有新增修改或删除,数据变化可直接反映到Access链接表中
来源 https://zhuanlan.zhihu.com/p/461019240