如何以编程方式将Excel数据导入到Access表中?
我已经阅读了一些相关的主题,但仍然留给我这个问题。 我想在Access数据库应用程序中编写一个函数,以编程方式导入前两行之前的Excel数据,即头和单元分隔符。
我期待着完成以下的事情:
- 能够dynamicselect我想要导入的Excel文件,可能使用对话框,也可能是一个文件浏览器窗口。
- 在导入的每行中插入“通用”数据 – 就像logging仪的资产编号和logging仪的指定位置一样。
- 在第3行而不是第1行开始导入,因为设备会自动将logging的标题和测量单位信息放在那里。
- 忽略工作表中的所有其他列 – 数据总是存在于列A到列G中,数据总是从第3行开始。
这是如何Excel数据通常格式化(破折号表示数据):
date时间温度露点湿球GPP相对湿度 CºCº克/ Kg% ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
我已经尝试了内置的Access'Get External Data'函数,但是它不会跳过第2行,Excel文件中的额外数据在尝试导入时会引发错误,从而停止进程。
我会第一个承认,在使用外部文件之前,我从来没有尝试为Access编写导入函数,因此我是一个新手。 任何帮助人可以告诉我总是会非常感激,我可以根据需要更新这个尝试的代码。 提前谢谢大家的帮助!
– 编辑01/03/2011 @ 10:41上午 –
在阅读了Remou提出的Excel数据线程的ADO连接之后,下面是一些我认为可以做的工作的代码,但是我不确定。
Dim rs2 As New ADODB.Recordset Dim cnn2 As New ADODB.Connection Dim cmd2 As New ADODB.Command Dim intField As Integer Dim strFile As String strFile = fncOpenFile If strFile = "" Then Exit Sub With cnn2 .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source='" & strFile & "'; " & "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'" .Open End With Set cmd2.ActiveConnection = cnn2 cmd2.CommandType = adCmdText cmd2.CommandText = "SELECT * FROM [Data$] WHERE G1 IS NOT NULL" rs2.CursorLocation = adUseClient rs2.CursorType = adOpenDynamic rs2.LockType = adLockOptimistic rs2.Open cmd2
您可以使用TransferSpreadsheet: http : //msdn.microsoft.com/en-us/library/aa220766(v=office.11).aspx
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ "Employees","C:\Data\Test.xls", True, "A3:G12"
或者您可以使用ADO连接连接到Excel 。
导入或链接可能是最简单的,然后使用查询来更新电子表格数据和公用数据的相关表格。