Daten aus Excel-Sheets importieren

Gelegentlich werden Sie als Access-Entwickler vor der Aufgabe stehen, den Import aus Excel-Dateien zu implementieren. Manchmal gibt es dabei Sonderfälle, in denen etwa die Daten aus mehreren Sheets eingelesen oder bereitgestellt werden sollen. Wir schauen uns an, wie das mit mehreren Sheets gelingt.

Verschiedene Excel-Sheets importieren

Wenn Sie einmal verschiedene Seiten eines Excel-Dokuments importieren möchten, müssen Sie dafür bei der TransferSpreadsheet-Methode des DoCmd-Objekts einen bestimmten Ausdruck für den Parameter Range angeben.

Angenommen, Sie verwenden eine Excel-Datei, die zwei Sheets namens Tabelle1 und Tabelle2 wie in Bild 1 enthält.

Excel-Datei mit zwei Sheets

Bild 1: Excel-Datei mit zwei Sheets

Im ersten Beispiel wollen wir beide Sheets in jeweils eine eigene Tabelle einfügen – die Feldüberschriften sind ja bereits auf geeignete Weise ausgelegt.

Der dazu verwendete Befehl lautet DoCmd.TransferSpreadsheet. Normalerweise würden Sie diesen Befehl wie folgt einsetzen, um die Daten von Excel in eine Access-Datenbank zu importieren:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tblTest1", _
    CurrentProject.Path & "\Test.xlsx", True

Der erste Parameter legt dabei fest, dass es sich um einen Import und nicht etwa um eine Verknüpfung handelt. Der zweite legt die Art der Quelle fest. Der dritte Parameter bestimmt den Namen der Tabelle, in welche die Daten importiert werden sollen, der vierte die Quelldatei. Schließlich legen Sie mit dem Wert True für den fünften Parameter fest, dass die Werte der ersten Zeile als Spaltenüberschriften interpretiert werden sollen.

Um diese Anweisung testweise wiederholt aufrufen zu können, haben wir diese in die Prozedur aus Listing 1 eingefügt. Die ersten Zeilen dieser Anweisung versuchen, bei deaktivierter eingebauter Fehlerbehandlung eine eventuell vorhandene Tabelle namens tblTest1 zu löschen. Dies kann zum Beispiel fehlschlagen, weil die Tabelle noch gar nicht vorhanden ist – dieser Fehler wird ignoriert.

Public Sub ImportExcelEinfach()
     On Error Resume Next
     DoCmd.DeleteObject acTable, "tblTest1"
     If Err.Number = 2008 Then
         MsgBox "Die Tabelle kann nicht gelöscht und neu erstellt werden, da diese geöffnet ist."
         Exit Sub
     End If
     On Error GoTo 0
     DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tblTest1", _
         CurrentProject.Path & "\Test.xlsx", True
End Sub

Listing 1: Import eines Excel-Sheets

Es kann jedoch auch sein, dass die Tabelle gerade geöffnet ist. In diesem Fall erscheint eine entsprechende Meldung und die Prozedur wird abgebrochen. Alternativ könnten Sie hier auch eine Anweisung voranstellen, welche die Tabelle zuvor schließt.

Das Ergebnis sieht wie in Bild 2 aus. Es werden natürlich nur die Daten der ersten gefundenen Tabelle der Excel-Datei importiert.

Import ohne Angabe des Quellsheets

Bild 2: Import ohne Angabe des Quellsheets

Zwei Sheets in zwei Tabellen

Im nächsten Schritt wollen wir die Daten der beiden Sheets in jeweils eine eigene Tabelle importieren. Hier wird es interessant: Spätestens in der zweiten DoCmd.TransferSpreadsheet-Anweisung müssen wir irgendwie festlegen, dass nicht das erste, sondern das zweite Sheet der Excel-Datei importiert werden soll.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar