2010-12-31 21 views
5

Przeczytałam trochę powiązanych tematów, ale wciąż pozostawiam mi to pytanie. Chcę napisać funkcję w aplikacji bazy danych programu Access, aby programowo zaimportować dane programu Excel rozpoczynające się przed pierwszymi dwoma wierszami - które są nagłówkiem i ogranicznikami jednostek.Jak programowo importować dane programu Excel do tabeli programu Access?

szukam wykonać następujące rzeczy:

  • Będąc w stanie dynamicznie wybrać plik Excel szukam importować, być może za pomocą okna dialogowego, a może okno przeglądarki plików.
  • Wstaw "zwykłe" dane do każdego importowanego wiersza - tak jak numer zasobu rejestratora i wyznaczoną lokalizację rejestratora.
  • Rozpocznij importowanie w wierszu nr 3, zamiast w wierszu nr 1 - ponieważ urządzenie automatycznie umieszcza tam informacje nagłówka i jednostki miary rekordu.
  • Zignoruj ​​wszystkie pozostałe kolumny w arkuszu roboczym - dane będą ZAWSZE obecne w kolumnach od A do G, a dane będą ZAWSZE zaczynać się od wiersza nr 3.

ten sposób dane Excel jest powszechnie sformatowane (kreski oznaczają dane):

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

Próbowałem wbudowany dostęp „Pobierz dane zewnętrzne” funkcji, ale wygrał” t przeskocz poza wiersz # 2, a dodatkowe dane w pliku Excel zgłaszają błąd podczas próby importowania, zatrzymując proces w jego śladzie.

Będę pierwszym, który przyznał, że nigdy nie próbowałem napisać funkcji importowania programu Access przed użyciem plików zewnętrznych, dlatego jestem trochę początkującym. Każda pomoc, którą ludzie mogą mi pokazać, będzie zawsze bardzo doceniana i mogę zaktualizować to za pomocą kodu, jeśli będzie to konieczne. Z góry dziękuję za wszelką pomoc, wszystkim!

- Edytowane 01/03/2011 @ 10:41 am -

Po przeczytaniu połączenia ADO do programu Excel wątku danych proponowanych przez Remou, tu jest jakiś kod myślę potęga wykonać zadanie, ale Nie jestem pewien.

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 

Odpowiedz

6

Można użyć 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" 

lub można connect to Excel with an ADO connection.

Importowanie lub łączenie może być najprostsze, a następnie użycie zapytania w celu zaktualizowania odpowiedniej tabeli danymi arkusza kalkulacyjnego i typowymi danymi.

+0

Problem z powyższym rozwiązaniem polega na tym, że muszę znać z wyprzedzeniem zakres danych, i to naprawdę zależy od tego, jak bardzo urządzenie to wciąga podczas swoich obowiązków związanych z rejestrowaniem danych. Przyjrzę się temu, kiedy jutro wrócę do biura - i zobaczę, czy mógłbym podać więcej informacji. –

+0

Zawsze można połączyć się za pomocą automatyki i uzyskać zasięg, choć spowolni to nieco. – Fionnuala

+0

Opublikowałem powyższe oświadczenie testowe, zmienione na mój poprzedni wpis. Czy to było to, o czym myślałeś? –

Powiązane problemy