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

Posted

技术标签:

【中文标题】如何以编程方式将 Excel 数据导入 Access 表?【英文标题】:How can I programmatically import Excel data into an Access table? 【发布时间】:2010-12-31 19:58:57 【问题描述】:

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

我希望完成以下事情:

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

这是 Excel 数据的常用格式(破折号表示数据):

日期 时间 温度 露点 湿球 GPP RH 摄氏度 摄氏度 摄氏度 克/公斤 % ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----

我已经尝试了内置的 Access 'Get External Data' 功能,但它不会跳过第 2 行,并且 Excel 文件中的额外数据在尝试导入时会引发错误,从而停止其进程轨道。

我将是第一个承认在使用外部文件之前我从未尝试为 Access 编写导入函数的人,因此我有点新手。人们可以向我展示的任何帮助将永远不胜感激,我可以根据需要使用尝试的代码来更新它。提前感谢大家的帮助!

-- 编辑于 01/03/2011 @ 10:41 am--

阅读 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

【问题讨论】:

【参考方案1】:

您可以使用 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"

或者你可以connect to Excel with an ADO connection。

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

【讨论】:

上述解决方案的问题是我需要提前知道数据的范围,这实际上取决于该设备在其数据记录职责期间拉入多少。明天我回到办公室时会看看这个 - 看看我是否可以提供更多信息。 总是可以通过自动化连接并获得范围,尽管它会慢一点。 我已经在上面发布了一个测试声明,对我之前的帖子进行了修改。这是你的想法吗? G1 是页眉吗,你是不是名为 Data 的表?您有 HDR=Yes,因此所选范围的第一行将用作列标题。 我一直在查看您的示例,我发现“SELECT * FROM [Sheet1$A3:G65536]”只会返回使用范围的记录,尽管我没有仔细测试。请注意,有几种方法可以将表格从 Excel 更新到 Access,而无需逐行逐行,其中一种是使用 IN。如果您需要示例,请回复。

以上是关于如何以编程方式将 Excel 数据导入 Access 表?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中以编程方式从 Excel 文件中大量导入数据到 Access

以编程方式将 SQLite 数据导出到 iOS 中的 Excel

如何将包含数百张工作表的 excel 文件导入数据库以在 C# 项目中使用?

如何将 Excel 文件导入 SQL Server? [关闭]

如何将excel中数据导入matlab并存入数组中

用java实现一个功能:以excel制作的一个任i意表格区域,将其规范化为第一行为列名往后各行为内容