Excel im Zugriff per SQL, DAO und Co.

Auf Excel-Dateien greift man am einfachsten durch einen entsprechenden Import oder eine Verknüpfung zu. Gelegentlich macht es auch Sinn, per Automation durch die Zellen zu huschen, um die gewünschten Informationen zu lesen oder zu schreiben. Eine wenig beachtete Möglichkeit ist die, per SQL oder DAO auf die in einer Excel-Tabelle gespeicherte Tabelle zuzugreifen.

Zu Beispielzwecken verwenden wir eine ganz einfache Excel-Datei, die unter dem Namen c:\Excel\Namen.xls gespeichert ist und im Dateiformat von Excel 97-2003 vorliegt. Die erste Tabelle dieser Datei sieht wie in Bild 1 aus.

pic001.png

Bild 1: Eine einfache Excel-Tabelle zum Experimentieren

Sie könnten nun per Verknüpfung, Import oder sogar per Automation auf die Daten dieser Tabelle zugreifen. Wir gehen diesmal allerdings einen ganz anderen Weg, nämlich über SQL. Access stellt einen ISAM-Treiber zur Verfügung, über den Sie mit einer SQL-Abfrage auf die in der Excel-Datei gespeicherten Daten zugreifen können.

Um dies auszuprobieren, legen Sie in einer Access-Datenbank eine SQL-Anweisung mit dem folgenden Text an:

SELECT * FROM [Tabelle1$] IN ''C:\Excel\Namen.xls'' [Excel 8.0;HDR=No;IMEX=0;]

Neben der Angabe der Quelldatei mit der IN-Klausel sind vor allem die Informationen in eckigen Klammern wichtig. Der erste Teil gibt die Excel-Version an, in der die Datei vorliegt. Hier gelten nicht die üblichen Versionsnummern, denn das Dateiformat ist zum Beispiel von Excel 97 bis Excel 2003 gleich geblieben. Hier lautet die entsprechende Nummer 8.0.

Der Parameter HDR legt fest, ob die erste Zeile Spaltenüberschriften enthält. No bedeutet keine Zeilenüberschriften. IMEX legt schließlich die Zugriffsart fest (0: exportieren, 1: importieren, 2: verknüpfen). Im Gegensatz etwa zur Methode DoCmd.TransferSpreadsheet, wo der Parameter TransferType festlegt, ob die Daten von Excel nach Access importiert oder verknüpft werden oder ob die Daten von Access aus in eine Excel-Tabelle geschrieben werden, findet hier immer eine Verknüpfung statt.

Allerdings erlaubt nur der Wert 0 für den Parameter IMEX das ändern von Daten in der auf diese Weise verknüpften Excel-Datei.

Achtung: HDR scheint nicht immer zu funktionieren; prüfen Sie das für Ihre Kombination aus Jet- und Office-Version. Gegebenenfalls wird die Einstellung nicht beachtet und die erste Zeile wird immer als Quelle für die Spaltenüberschriften verwendet.

In diesem Fall sollten Sie sicherstellen, dass diese auch Spaltenüberschriften enthält – anderenfalls verwendet Access die Werte der ersten Zeile als Feldnamen.

Erster Zugriff

Passen Sie die oben vorgestellte SELECT-Anweisung an Ihre Gegebenheiten an und probieren Sie diese dann aus. Dazu öffnen Sie eine Abfrage in der Entwurfsansicht, klicken den Dialog Tabelle anzeigen weg und wechseln zur SQL-Anzeige. Dort tragen Sie dann den SQL-Ausdruck ein und aktivieren die Datenblattansicht der Abfrage.

Das Ergebnis überzeugt: Es werden alle Daten der Excel-Tabelle angezeigt (s. Bild 3).

pic002.png

Bild 2: Ergebnis einer SQL-Abfrage in einer Excel-Tabelle

pic003.png

Bild 3: änderungen in der Abfrage werden gleich nach dem Speichern im Excel-Sheet aktualisiert

Auch das ändern und Löschen von Daten in der Excel-Tabelle macht sich schnell in der Access-Abfrage bemerkbar. Wenn Sie jedoch neue Zeilen oder Spalten zur Excel-Tabelle hinzufügen, bemerkt Access dies erst nach dem Schließen und erneuten Öffnen der Abfrage. Der Hintergrund ist wohl, dass Access beim ersten Abfragen den zu untersuchenden Bereich des Excel-Sheets festlegt – und wenn dann zur Laufzeit Daten außerhalb dieses Bereichs eingegeben werden, werden diese schlicht nicht berücksichtigt.

Bereich festlegen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar