| |
|
Autor |
Thema: Import Excel=Access (Gelesen 296 mal)
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« am: Juli 27, 2010, 10:23:03 » |
Zitat
|
Guten Morgen
Ich sitze seit einiger Zeit an einem Problem wo ich mal Hilfe oder Rat benötige. Angefügt habe ich ein Excel Dokument Beispiel was ich in eine Access Datenbank einlesen möchte, das geschieht auch soweit ganz gut (Datei / Daten import) nur und hier liegt mein Problem den als grün markierten Excel Datensatz liest er in Access als fünf Datensätze ein. Die in den ersten drei Zeilen stehende Meldungsnummer ist aber gültig für den ganzen bereich und sie wird nur in einem Datensatz mit eingelesen, wie könnte ich das ändern oder verbessern?
Danke
Gruß Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #1 am: Juli 27, 2010, 10:35:30 » |
Zitat
|
Hallo Stapi,
soweit ich das jetzt sehe, hast du in deiner Exceltabelle Zellen vereint. dieses kann Access nicht verarbeiten und macht daraus verschiedene Datensätze. Wenn du in der Exceltabelle Absätze einbauen willst, nutze doch Strg+Enter. Dann bleibt das in einer Zeile und Access liest das als einen Datensatz aus.
LG Sulu
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #2 am: Juli 27, 2010, 12:10:54 » |
Zitat
|
Hallo Sulu
Soweit richtig. Aber das habe ich leider nicht Verstanden bzw die Funktion geht bei mir nicht.
Wenn du in der Exceltabelle Absätze einbauen willst, nutze doch Strg+Enter diese Funktion sagt in der online Hilfe etwas anderes aus
Da es sich hier gezeigt nur um einen ausschnitt handelt das richtige Dokument beinhaltet 5000 solcher Datensätze, die möchte ich nicht alle händich bearbeiten.
Gruß Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #3 am: Juli 27, 2010, 12:16:35 » |
Zitat
|
gut. 5000 Datensätze sind reichlich viel... Wie spuckt Access die Datensätze aus? schreibt er den ersten Teil in jede der 5 zeilen? wenn ja, könntest du danach gruppieren und den rest dabei zusammenfassen.
Aber beim Gruppieren bin ich selber nicht so ganz fit. database weiß da mehr, wenn das ein Ansatz ist.
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #4 am: Juli 27, 2010, 12:46:52 » |
Zitat
|
Access schreibt sie genau rein wie sie in der Excel liste stehen nur das sie in den resten drei Spalten die Zahl in den Datensatz schreibt wo sie auch steht mal an erster oder wie im Beispiel in Zeile 3. Mein Gedanke war da alle Daten in Excel gerahmt sind das über den weg zu machen aber hier fehlt mir der Ansatz der Umsetzung wenn das so überhaupt möglich ist.
Gruß Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #5 am: Juli 27, 2010, 13:18:21 » |
Zitat
|
Access schreibt sie genau rein wie sie in der Excel liste stehen Wie meinst du das? Hast du einen Screenshot? Vllt. hilft mir der noch weiter. Ansonsten habe ich gerade auch keine Idee mehr...
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #6 am: Juli 27, 2010, 13:58:24 » |
Zitat
|
Halo Sulu
Die angehängte Excel Mappe1 genau so liest sie Access ein, Zeile 1 in Exel ist Datensatz 1 in Access.
Und wenn du dir die Mappe anschaust wirst du sehen das in dem Bespiel nur in der Zeile 3 die Nummer steht, da ich aber später in access genau nach dier Nr suchen werden, würden die Datensätze wegfallen die ohne Nr sind und somit auch Informationen fehlen. Ich hoffe ich hab es verständlich genug geschrieben.
Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #7 am: Juli 27, 2010, 14:03:52 » |
Zitat
|
jetzt auf jdene Fall Verwendest du zufällig einen Zählenden Primärschlüssel? Dann könntest du dass nachträglich per Hand ändern... Aber sonst will mir bei deinem Problem wirklich nichts einfallen, als Handarbeit / Suchen und ersetzen in der Excel-Tabelle. Ich hoffe, die anderen können dir mehr weiterhelfen. LG Sulu
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #8 am: Juli 27, 2010, 14:18:34 » |
Zitat
|
Danke Sulu
Hoffe auf Lösungsansätze die mir die Handarbeit ersparen, denn sie müsten so alle paar Monate immer wieder erfolgen da änderungen oder ergänzungen erfolgen
Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #9 am: Juli 27, 2010, 14:32:21 » |
Zitat
|
Wäre es da nicht einfacher, die Änderungen direkt in der Datenbank vorzunehmen? Es hat zwar den nachteil, dass da Änderungen nicht ohne weiteres Rückgängig zu machen sind, aber wenn man neues direkt immer da einträgt, sollte sich der Änderungsauwand minimieren...
LG Sulu
PS: Nochmals viel Glück, dass jetzt möglichst schnell hinzubekommen.
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #10 am: Juli 27, 2010, 17:00:26 » |
Zitat
|
Richtig, ich kann änderungen oder ergänzungen im nachgang in der Datenbank machen, aber nur wenn das einlesen aus dem Excel Dokument vernünftig läuft ohne vor her alle Datensätze händisch an fassen zu müssen.
Gruß Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Stapi
Access-Profi

Offline
Beiträge: 166
|
 |
« Antworten #11 am: Juli 29, 2010, 16:06:39 » |
Zitat
|
Hallo Hat niemand eine Idee wie ich das vernünftig anstellen könnte ohne händisch in Exel die Daten zu bearbeiten  Für Tipps oder anregungen wäre ist sehr Dankbar. Gruß Stefan
|
|
|
|
|
Gespeichert
|
|
|
|
Sulu
Access-User
Offline
Beiträge: 56
|
 |
« Antworten #12 am: Juli 30, 2010, 06:30:48 » |
Zitat
|
Mir ist da gerade noch was eingefallen. Vielleicht könntest du die Excel-Tabelle via einem Makro bearbeiten. Allerdings kann ich dir nicht sagen wie, weil ich nur weiß, dass es soetwas gibt.
LG Sulu
|
|
|
|
|
Gespeichert
|
|
|
|
|
Hondo
|
 |
« Antworten #13 am: Juli 30, 2010, 08:30:08 » |
Zitat
|
Hallo, eventuell wäre es sinnvoll die einzelnen ZELLEN Zeilenweise aus dem Excel Dokument einzulesen per Excel Automatisation. Einziger Knackpunkt könnte die Performance sein.
Ich meine es gibt im Forum schon ein Beispiel dazu.
Andreas
|
|
|
|
|
Gespeichert
|
|
|
|
|
Hondo
|
 |
« Antworten #14 am: Juli 30, 2010, 09:10:54 » |
Zitat
|
Hallo, ich habe mal ein etwas umfassenderes Beispiel für dich wie man es machen könnte. Der Ablauf: Temporäre Datenbank erstellen, darin Importtabelle erstellen und die Daten aus Excel zeilenweise importieren. In dieser Temporären Tabelle kann man dann bequem die Daten bearbeiten, auf Doubletten überprüfen, Formatänderungen durchführen etc. Danach die bereinigten Datensätze mit dem noch geöffneten Recordset in das Arbeitsbackend übernehmen. Hier der Code, die erste Funktion und die API Deklarationen müssen in ein Modul. Gruß Andreas Option Compare Database Option Explicit
Public objXL As Object Public boolXL As Boolean Public boolXL2 As Boolean
Private Const SW_SHOWNORMAL = 1
Private Declare Function apiFindWindow Lib "user32" Alias _ "FindWindowA" (ByVal strClass As String, _ ByVal lpWindow As String) As Long
Private Declare Function apiSendMessage Lib "user32" Alias _ "SendMessageA" (ByVal Hwnd As Long, ByVal Msg As Long, ByVal _ wParam As Long, lParam As Long) As Long
Private Declare Function apiSetForegroundWindow Lib "user32" Alias _ "SetForegroundWindow" (ByVal Hwnd As Long) As Long
Private Declare Function apiShowWindow Lib "user32" Alias _ "ShowWindow" (ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long Function fIsAppRunning(ByVal strAppName As String, _ Optional fActivate As Boolean) As Boolean Dim lngH As Long, strClassName As String Dim lngX As Long, lngTmp As Long Const WM_USER = 1024 On Local Error GoTo fIsAppRunning_Err fIsAppRunning = False Select Case LCase$(strAppName) Case "excel": strClassName = "XLMain" Case "word": strClassName = "OpusApp" End Select
lngH = apiFindWindow(strClassName, vbNullString) If lngH <> 0 Then apiSendMessage lngH, WM_USER + 18, 0, 0 lngX = apiIsIconic(lngH) If lngX <> 0 Then lngTmp = apiShowWindow(lngH, SW_SHOWNORMAL) End If If fActivate Then lngTmp = apiSetForegroundWindow(lngH) End If fIsAppRunning = True End If fIsAppRunning_Exit: Exit Function fIsAppRunning_Err: fIsAppRunning = False Resume fIsAppRunning_Exit End Function Sub Excel_Import() Dim ExcelApp As Object Dim ExcelRuns As Boolean
If fIsAppRunning("Excel") Then Set objXL = GetObject(, "Excel.Application") boolXL = False Else Set objXL = CreateObject("Excel.Application") boolXL = True End If ExcelRuns = True objXL.Workbooks.Add ("Pfad_und_Name_Excel_Datei.xls")
'1. Schritt: Temporäre DB erstellen und Daten importieren Set DBtemp = CreateNewDatabase("Datenbankname", "Tabellenname") Set rstemp = DBtemp.OpenRecordset("Select * from Datenbankname")
If ExcelRuns Then Set ExcelApp = GetObject(, "Excel.Application") boolXL2 = False Else Set ExcelApp = CreateObject("Excel.Application") boolXL2 = True End If ExcelApp.Workbooks.Open FileName:=NameExcelDatei, ReadOnly:=True With ExcelApp.ActiveWorkbook.Worksheets(1) For i = 1 To .UsedRange.Rows.Count rstemp.AddNew rstemp!Numerisches_Feld = CDbl(.Cells(i, Zellennummer)) rstemp!String_Feld = CStr(.Cells(i, Zellennummer).Value) rstemp!Bool_Format = True rstemp.Update Next i End With If boolXL2 Then ExcelApp.Application.Quit Set ExcelApp = Nothing
'2. Schritt: Daten in Arbeitsbackend übernehmen 'Dazu einfach in einer Schleife über rstemp die Daten in das Arbeitsbackend übernehmen
'Code für Fehlerroutiene: If boolXL Then objXL.Application.Quit Set objXL = Nothing
End Sub Function CreateNewDatabase(dbName As String, tabName As String, Optional strTable As String) As Database Dim wrkDefault As DAO.Workspace Dim dbNew As DAO.Database
If IsNull(strTable) Or strTable = "" Then strTable = "CREATE TABLE " & tabName & " (Feld1, Feld2, ....)" End If
' Standardarbeitsbereich bestimmen. On Error GoTo CreateNewDatabase_Error
Set wrkDefault = DBEngine.Workspaces(0) On Error Resume Next If Dir(CurrentProject.Path & "\" & dbName & ".mdb") <> "" Then Kill CurrentProject.Path & "\" & dbName & ".mdb"
Set dbNew = wrkDefault.CreateDatabase(CurrentProject.Path & "\" & dbName & ".mdb", dbLangGeneral, dbEncrypt) dbNew.Execute strTable Set CreateNewDatabase = dbNew End Function
|
|
|
|
« Letzte Änderung: Juli 30, 2010, 09:13:18 von Hondo »
|
Gespeichert
|
|
|
|
|
Ähnliche Themen
|
Betreff |
Begonnen von |
Antworten |
Aufrufe |
Letzter Beitrag |
|
|
Excel Import - Spalten zuordnen
|
samke
|
1
|
474
|
Mai 20, 2009, 10:25:48
von DF6GL
|
|
|
Datenimport aus Excel
|
Dirk Schwarze-Müller
|
3
|
1202
|
Mai 05, 2005, 22:00:10
von DF6GL
|
|
|
Import-Button
|
Fragezeichen
|
2
|
338
|
Januar 12, 2010, 08:14:53
von Fragezeichen
|
|
|
Fehler beim Excel Import von Feld mit Wert #DIV/0!
|
Franky
|
8
|
788
|
September 18, 2008, 17:18:25
von Franky
|
|
|
Tabelle Import-Fehler löschen
|
thorstens1304
|
1
|
270
|
April 18, 2010, 20:42:27
von database
|
Schnellantwort |
| Bei der Schnellantwort können Sie Bulletin Board Code und Smileys wie im normalen Beitrag benutzen. |
|
Lade...
|
|
|
|