Link: Wichtiger Hinweis in eigener Sache!
| Autor: Klaus Keller | Erstellt am: 2006-05-28 | Aufrufe: 10843 |
Tipp 92: Excel-Datei per ADO auslesen
Vorweg ein Hinweis: Eine Excel-Datei eignet sich nicht als Datenbank, dafür gibt es richtige Datenbanken in Form von Access, SQL-Server, MySQL, Interbase usw. Bei Excel können trotz eines korrekten Quellcodes Fehler auftreten, dazu kann kein Mehrfacher Zugriff erfolgen. Ist die Excel-Datei bereits geöffnet, entweder in Excel selbst oder durch ASP, tritt ein Fehler auf.
ADO bietet die Möglichkeit, auf viele unterschiedliche Datenquellen zugreifen zu können. So auch auf Excel. Aufgrund inzwischen mehrerer Anfragen, teils auch im Forum, möchte ich Ihnen aufzeigen wie Excel-Dateien ausgelesen werden können. Eingesetzt wird ein ODBC-Treiber und eine SQL-Anweisung, damit stehen die Daten innerhalb eines Recordset zur Verfügung. Zuerst mal ein Beispiel das den Zugriff demonstriert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| dim rs, strConn, strSQL
strConn = "DRIVER=Microsoft Excel-Treiber (*.xls);DBQ=" & _ Server.MapPath("Test.xls")
strSQL = "SELECT * FROM [Tabelle1$a1:b]"
set rs = Server.CreateObject("ADODB.Recordset")
rs.open strSQL, strConn, 3, 3
if rs.EOF then Response.Write("Kein Datensatz gefunden") else Response.Write("Anzahl der Treffer:" & rs.Recordcount) Do while not rs.EOF Response.Write("<br>" & rs.Fields("Vorname").Value & " " & _ rs.Fields("Nachname").Value) rs.MoveNext Loop end if rs.close set rs = nothing |
In Zeile 6 steht die SQL-Anweisung, interesant daraus ist:
Zuerst muss die Tabelle angegeben werden, hier habe ich den Standardwert "Tabelle1" angegeben. Anschliessend erfolgen die Feldangaben im Format $von:bis. Optional ist die Angabe der Zeilen, hier von 1 beginnend. Aber Vorsicht: das erste Feld (1) steht nicht im Recordset zur Verfügung, somit steht als erster Datensatz "a2" zur Verfügung! Sie können die Anzahl der Felder auch weiter eingrenzen:
Somit stehen alle Datensätze von a2 bis a5 (bzw. b5) zur Verfügung. In Zeile 17 erfolgt die Ausgabe, hier habe ich ein Feldname verwendet, dieser steht an erster Stelle der Reihe, in Beispiel oben auf a1 bzw. b1.
Herunterladen: tip92.zip
|