如何以编程方式将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 。

导入或链接可能是最简单的,然后使用查询来更新电子表格数据和公用数据的相关表格。