VBA将Excel电子表格逐行导入到Access

我正在debugging一些代码,需要找出哪里
DoCmd.TransferSpreadsheet acImport, , ".....
失败了,所以我决定一行一行地“手动”导入它,看看它的位置。

我想这样的事情是我正在寻找的东西:

 mySpreadSheet = ConnectTo(Spreadsheet.xlsx) while(!mySpreadSheet.EOF) get(mySpreadSheet.nextLine) SQL("UPDATE MyTable with mySpreadSheet.nextLine") 

我试过谷歌search无济于事。 任何帮助深表感谢!


附加信息:

  • 电子表格和Access表的列名是相同的。
  • 每个数据types都是nvarchar(MAX)(或Access调用它的“Memo”)
  • 该表是SQL Server 2008的链接表

您可以创buildADO连接到您的电子表格(请参阅Excel 2007的连接string ),然后用该连接打开一个ADOlogging集(请参阅StackOverflow:VBA中的ADODBlogging集,例如excel字段为空时不是例如)。

然后遍历logging集行,并使用该行的值创build一个SQL INSERT语句。

 strInsert = "INSERT INTO MyTable (first_field, second_field) VALUES ('" & - rs2.Field(0).Value & "', '" & rs2.Field(1).Value & "');" Debug.Print strInsert CurrentDb.Execute strInsert, dbFailonerror 

该代码剪切假设first_field和second_field是文本数据types。 如果它们是数字,则会丢失单引号。

我认为这大致上是你问的。 然而,在诉诸代码之前,我会检查电子表格干净地导入到一个新的本地Access表中。 (另外,检查新表上的数据types和约束是否与链接的SQL Server表的数据types和约束兼容。)如果可行,可以尝试从Management Studio直接导入电子表格到SQL Server,或者任何适当的工具。

如果您有一个明确定义的数据表格布局(HansUp答案),ADO运作良好。 如果您在加载对象之前需要添加控件,则可以挂钩到Excel工作簿中,然后取出您喜欢的任何数据。 这真的取决于你需要的控制水平。

 Public Sub LoadExcelToAccess(xlPath As String) 'uses late binding to open excel workbook and open it line by line 'make reference to Microsoft Excel xx.x Object Model to use native functions, requires early binding however Dim xlApp As Object 'Excel.Application Dim xlWrk As Object 'Excel.Workbook Dim xlSheet As Object 'Excel.Worksheet Dim i As Long Dim sql As String Set xlApp = VBA.CreateObject("Excel.Application") 'toggle visibility for debugging xlApp.Visible = False Set xlWrk = xlApp.Workbooks.Open(xlPath) Set xlSheet = xlWrk.Sheets("Sheet1") 'modify to your perticular sheet 'depends on what your trying to do with the sheet For i = 1 To 10 'quick and dirty: best to load items into custom class collection, then do processing there sql = "Insert Into [Temp] (Col1) VALUES (" & xlSheet.Cells(i, 1).Value & ")" DoCmd.RunSQL sql Next i 'make sure to dispose of objects xlWrk.Close xlApp.Quit Set xlSheet = Nothing Set xlWrk = Nothing Set xlApp = Nothing End Sub 

出于故障排除的目的,请尝试链接到电子表格,并查看遇到的问题,包括在数据表视图中查看数据时显示错误。

您也可以尝试将Excel数据复制到剪贴板并将其粘贴到Access表中。 无论什么失败都会被Access写入到“粘贴错误”表中。

另外两个选项:

  1. 将Access中的电子表格链接为表格。 在Access 2007中,转到“外部数据”窗格并select“导入Excel电子表格”。 您应该导入到一个现有的数据表,一个新的数据表或只是链接到Excel文件。 然后,您可以像使用Access表一样使用这个新的“Excel”表(在最后一种情况下将性能问题视为问题)。

  2. 尝试修复Docmd.TransferSpreadsheet问题。 我已经使用了这个方法好几年了,尽pipe在某些情况下应该有点棘手(我相信你的情况)。 如果您使用此方法提供有关您的问题的更多信息(包括您的Access和Excel版本),请值得。

我希望我能帮上忙 祝你好运。