如何以编程方式将Excel数据导入Access表?

Com*_*dal 5 excel ms-access vba

我已经阅读了一些相关的主题,但仍然留下了这个问题.我想在Access数据库应用程序中编写一个函数,以编程方式从前两行开始导入Excel数据 - 这两行是标题和单位分隔符.

我期待完成以下事情:

  • 能够动态选择我想要导入的Excel文件,可能使用对话框和文件浏览器窗口.
  • 在导入时将"公共"数据插入每一行 - 例如记录器的资产编号和记录器的指定位置.
  • 在第3行开始导入,而不是第1行 - 因为设备会自动将记录的标题和度量单位放在那里.
  • 忽略工作表中的所有其他列 - 数据将始终存在于列A到G中,并且数据将始终在第3行开始.

这就是Excel数据的常规格式(破折号代表数据):

     Date     Time     Temp     Dew Point     Wet Bulb     GPP     RH
                       Cº       Cº            Cº           g/Kg    %
     ----     ----     ----     ----          ----         ----    ----
     ----     ----     ----     ----          ----         ----    ----

我已经试过了内置的访问"获取外部数据"功能,但不会超过跳过列#2和Excel文件中的额外的数据尝试导入时,停止在其轨道的过程中抛出一个错误.

我将是第一个承认我在使用外部文件之前从未尝试为Access编写导入功能的人,因此我有点像新手.我们将非常感谢人们可以向我展示的任何帮助,并且我可以根据需要使用尝试的代码更新此内容.感谢您的所有帮助,大家!

- 编辑于2011年1月3日上午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
Run Code Online (Sandbox Code Playgroud)

Fio*_*ala 6

您可以使用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"
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用ADO连接连接到Excel.

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