2012-08-08 205 views
0

我在我的Access应用程序中有一张表,需要用一堆Excel文件填充数据。我想这样的代码:Access中导入Excel数据

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, strTable, strExcelpath, True 

但每次覆盖数据在我的访问表,而不是其附加的,它给了正在发送的绝对无法控制。

我需要找到一种方法来简单地将Excel文件中的数据追加到我的Access表中,这两个文件具有相同的结构,因此我想知道是否有一种方法可以逐行导入而不指定列。但是,对于个人知识和对用户使用的恐惧,我也想知道如何根据行和列来导入它。

谢谢!

编辑:代码对Excel文件中的选择:

Dim cn As ADODB.Connection 
Dim strQuery As String 

Set cn = New ADODB.Connection 
With cn 
    .Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source=" & Application.CurrentProject.Path & "\Excel\test.xls;" & _ 
         "Extended Properties=Excel 8.0;" 
    .Open 
End With 

strQuery = "INSERT INTO tblClients " & _ 
     "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE =" & Application.CurrentProject.Path & "\Excel\test.xls].[tblImport$]" 
DoCmd.RunSQL strQuery 

回答

1

您也可以参考一个Excel工作表或范围中查询:

INSERT INTO Table1 (ADate) 
SELECT SomeDate FROM [Excel 8.0;HDR=YES;DATABASE=Z:\Docs\Test.xls].[Sheet1$a1:a4] 

或者

INSERT INTO Table1 
SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=Z:\Docs\Test.xls].[Sheet1$] 

在程序中:

Sub RunThisQuery() 
    strQuery = "INSERT INTO tblClients " & _ 
     "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" _ 
     & Application.CurrentProject.Path & "\Excel\test.xls].[tblImport$]" 

    CurrentDB.Execute strQuery, dbFailOnError 
End Sub 

请注意,您的代码在DATABASE之后有空格。它必须读取DATABASE=,没有空间。

+0

请考虑我的Excel文件目前有近200列...我可以做一个SELECT *吗?这个部分是否有任何文档[Excel 8.0; HDR = YES; DATABASE = Z:\ Docs \ Test.xls] [Sheet1 $ a1:a4] 谢谢! – Estarius 2012-08-08 14:20:27

+0

是的,只要订单相同,您可以使用*,但不建议使用*。你会在这里得到一些信息http://support.microsoft.com/kb/257819,以及更多在Stackoverflow。 – Fionnuala 2012-08-08 14:24:47

+0

当我尝试这种方法时,我总是收到错误3011 ... – Estarius 2012-08-08 14:36:55