Letzte Kurzmitteilung - Erstellt von: database - Dienstag, 27 Juli 2010 13:46
Wenn euer Problem gelöst ist, klickt bitte in EUREM Start-Beitrag auf das "gelöst-Icon". Übrigens, es gibt ein "Danke-Icon" um euch für die Hilfe von anderen zu bedanken (Im Lösungsbeitrag den roten Stern klicken)
  
*
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
 
   Übersicht   Hilfe Suche Kalender Einloggen Registrieren  
Seiten: [1] 2
  Antworten  |  Themen-Optionen  
Autor Thema: Import Excel=Access  (Gelesen 296 mal)
Stapi
Access-Profi
**
Offline Offline

Beiträge: 166


« am: Juli 27, 2010, 10:23:03 »
ZitierenZitat

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 Offline

Beiträge: 56


« Antworten #1 am: Juli 27, 2010, 10:35:30 »
ZitierenZitat

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 Offline

Beiträge: 166


« Antworten #2 am: Juli 27, 2010, 12:10:54 »
ZitierenZitat

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 Offline

Beiträge: 56


« Antworten #3 am: Juli 27, 2010, 12:16:35 »
ZitierenZitat

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 Offline

Beiträge: 166


« Antworten #4 am: Juli 27, 2010, 12:46:52 »
ZitierenZitat

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 Offline

Beiträge: 56


« Antworten #5 am: Juli 27, 2010, 13:18:21 »
ZitierenZitat

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 Offline

Beiträge: 166


« Antworten #6 am: Juli 27, 2010, 13:58:24 »
ZitierenZitat

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 Offline

Beiträge: 56


« Antworten #7 am: Juli 27, 2010, 14:03:52 »
ZitierenZitat

jetzt auf jdene Fall Zwinkernd

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 Offline

Beiträge: 166


« Antworten #8 am: Juli 27, 2010, 14:18:34 »
ZitierenZitat

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 Offline

Beiträge: 56


« Antworten #9 am: Juli 27, 2010, 14:32:21 »
ZitierenZitat

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 Offline

Beiträge: 166


« Antworten #10 am: Juli 27, 2010, 17:00:26 »
ZitierenZitat

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 Offline

Beiträge: 166


« Antworten #11 am: Juli 29, 2010, 16:06:39 »
ZitierenZitat

Hallo

Hat niemand eine Idee wie ich das vernünftig anstellen könnte ohne händisch in Exel die Daten zu bearbeiten Huch   Für Tipps oder anregungen wäre ist sehr Dankbar.

Gruß Stefan
Gespeichert
Sulu
Access-User
*
Offline Offline

Beiträge: 56


« Antworten #12 am: Juli 30, 2010, 06:30:48 »
ZitierenZitat

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
Administrator
Access Guru
*****
Offline Offline

Beiträge: 3819


Balu


WWW
« Antworten #13 am: Juli 30, 2010, 08:30:08 »
ZitierenZitat

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
Administrator
Access Guru
*****
Offline Offline

Beiträge: 3819


Balu


WWW
« Antworten #14 am: Juli 30, 2010, 09:10:54 »
ZitierenZitat

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

Seiten: [1] 2
  Antworten  |  Themen-Optionen  

 
Gehe zu:  


Ähnliche Themen
Betreff Begonnen von Antworten Aufrufe Letzter Beitrag
Excel Import - Spalten zuordnen samke 1 474 Letzter Beitrag Mai 20, 2009, 10:25:48
von DF6GL
Datenimport aus Excel Dirk Schwarze-Müller 3 1202 Letzter Beitrag Mai 05, 2005, 22:00:10
von DF6GL
Import-Button Fragezeichen 2 338 Letzter Beitrag Januar 12, 2010, 08:14:53
von Fragezeichen
Fehler beim Excel Import von Feld mit Wert #DIV/0! Franky 8 788 Letzter Beitrag September 18, 2008, 17:18:25
von Franky
Tabelle Import-Fehler löschen thorstens1304 1 270 Letzter Beitrag 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.

Powered by MySQL Powered by PHP Powered by SMF 1.1.10 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS

Powered by MKPortal M 1.1.1 ©2003-2006 mkportal.it




Access Downloads     Excel Downloads     Word Downloads