2012-08-08 204 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