Geschrieben von: Hubert Daubmeier
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
Excel wird gerne zum Verwalten von Listen aller Art verwendet. Es ist einfacher zu handhaben und verlangt weniger - eigentlich keine - Struktur bei der Anlage, wie das etwa eine Datenbank erfordern würde. Nun wäre es doch naheliegend so eine Excel-Datei auch im Web oder Intranet anzubieten. Wie man eine Excel-Datei auf den Server stellt und verlinkt wissen Sie sicher. Aber wie man sie schnell und einfach dem Benutzer anbietet, ohne daß sich Excel öffnet zeigt dieser Artikel.
Ein Folgeartikel beschäftigt sich dann mit dem Gegenteil: wie bietet man dem Besucher eine vorhandene Liste als Excel-Datei an, sodaß sie einfach weiterverwendet werden kann. Dies berücksichtigte der hier vorgestellte Code bereits.
Zum Vorgehen verwenden wir ADO bzw. den Jet-Datenbanktreiber der auch den Komfort bietet eine Excel-Datei als Datenbank abzufragen. Damit verbunden ist jedoch ein kleiner Wehmutstropfen: da wir die Daten als Datenbank abfragen, können keine Formatierung und keinerlei grafische Objekte (Diagramme, Textfelder, etc) angezeigt werden.
Zwei Dinge sollten erfüllt sein, damit dies funktioniert:
Die Datei noch auf Ihren ASP-fähigen Server gespeichert und schon kann es ans Programmieren gehen. Die Beispieldaten dieses Artikels finden Sie in database.xls, und es handelt sich um Börsedaten:
Nachfolgend die Beschreibung der Datei READDB.ASP, die wir später per serverside include einbinden. In der Konstante CDATABASE wurde der Name der Exceldatei abgelegt und weit oben platziert, damit er sich bei Bedarf schnell ändern lässt. Den Rest der Geschichte kennen Sie sicher aus anderen Beispielen: es werden die Objektvariablen definiert und die Datenbank abgefragt.
Const CDATABASE = "./meineTabelle.xls" Dim oConn Dim oRs Dim Index Set oConn = CreateObject("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Excel 8.0;DATABASE=" & _ Server.MapPath(CDATABASE) Set oRs = oConn.Execute("SELECT * FROM tabelle")
Im Folgenden wird die Datenbank ausgelesen. Zwei kleinere Probleme tauchen auf: wie heißen denn nun meine Feldnamen in der Datenbank bzw. was passiert, wenn ich deren Namen ändere? Und zum anderen was tun, wenn sich die Anzahl der Spalten ändert? Bestimmt wurden Ihre Spalten und deren Überschriften nicht sehr strukturiert angelegt, wie etwa bei einer Accessdatenbank. Einfache Antwort: plagen Sie sich nicht und überlassen Sie die Arbeit dem System. Das Beispiel zeigt daher, wie Sie die Feldnamen per Indexnummer in einer Schleife ausgeben und damit beide Probleme elegant umgehen können.
Response.write("<table cellspacing=""0"" cellpadding=""2"">") & vbcrlf For Index=0 to (oRs.fields.count-1) Response.write("<th>" & oRs(Index).Name & "</td>") & vbcrlf Next
Die erste Zeile schreibt den Tabellenheader. Die folgende Schleife durchläuft die Felder und gibt für jedes Feld per .Name den Feldnamen aus. Ich habe hierbei bewußt die gemischte Schreibweise von ASP Code und HTML vermieden, da die Dinge so doch übersichtlicher bleiben.
Do while (Not oRs.eof) Response.write("<tr>") & vbcrlf For Index=0 to (oRs.fields.count-1) Response.write("<td>" & oRs(Index) & "</td>") & vbcrlf Next Response.write("</tr>") & vbcrlf oRs.MoveNext Loop
Dieser Codeteil durchläuft nun alle Datensätze und gibt sie der Reihe nach aus. Soweit keine Abweichung von der Standardbehandlung etwa mit einer Access-DB. Zu guter Letzt wird noch der Tabellenabschluß geschrieben und die Datenbank geschlossen.
Response.write("</table>") & vbcrlf oRs.close oConn.close
Das folgende Gesamtlisting der Include-Datei erweitert das obige Beispiel um:
<% Const CDATABASE = "./database.xls" Dim oConn Dim oRs Dim Index Dim sColorcount, sColorstyle Sub Readdb() Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Excel 8.0;DATABASE=" & _ Server.MapPath(CDATABASE) Set oRs = oConn.Execute("SELECT * FROM tabelle") Response.write("<table cellspacing=""0"" cellpadding=""2"">") & vbcrlf For Index=0 to (oRs.fields.count-1) Response.write("<th>" & oRs(Index).Name & "</td>") & vbcrlf Next sColorcount = 1 Do while (Not oRs.eof) Response.write("<tr>") & vbcrlf if (sColorcount and 1) = 1 Then sColorstyle = " class=""marked""" Else sColorstyle = "" For Index=0 to (oRs.fields.count-1) Response.write("<td" & sColorstyle & ">" & oRs(Index) & _ "</td>") & vbcrlf Next Response.write("</tr>") & vbcrlf oRs.MoveNext sColorcount = sColorcount + 1 Loop Response.write("</table>") & vbcrlf oRs.close oConn.close End Sub %>
Bleibt noch die Ausgabe. Da die Include-Datei die komplette Tabelle erstellt, kann die Ausgabeseite einfach oder komplex gehalten sein. Konzentrieren Sie sich in diesem Schritt daher mehr auf das Design und nehmen Sie nur die beiden wichtigen Schritte aus diesem Beispiel heraus: das Einbinden der Include-Datei in Zeile 2 und an passender Stelle der Aufruf der Unterroutine READDB.
Den folgenden Sourcecode finden Sie in der Datei default.asp:
<%@ LANGUAGE = VBScript %> <!-- #include file="include/readdb.asp" --> <html> <head> <title>Excel als Datenbank </title> <link rel="stylesheet" type="text/css" href="Include/stylesheet.css"> </head> <body> <b>Exceldatei als Datenbank ausgegeben<br> <hr size="1" color="#000000"> <% call Readdb %> </body> </html>
Das Beispiel ist bewußt einfach gehalten. Ich wollte Ihnen damit primär mehr einen Startpunkt und ein sofort einsetzbares Beispiel geben, das Sie nach Ihren eigenen Ideen ausbauen können. Denkbare Erweitungen reichen von der Formatierung bis zur Fehlerbehandlung und natürlich einem etwas attraktiverem Design. Nicht sehr elegant gelöst ist auch die fest "verdrahtete" Dateiangabe. Da Sie das Beispiel sicher für Ihre Bedürfnisse - etwa um die Übergabe eines Abfragekriteriums - anpassen werden, sollte Ihrer Kreativität keine Grenze gesetzt sein.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001110.zip
Datenbank zur Weiterbearbeitung in Excel bereitstellen
http:/www.aspheute.com/artikel/20001128.htm
Ein Excel-Diagramm am Server generieren und zum Client schicken
http:/www.aspheute.com/artikel/20010307.htm
Ein Excel-Sheet am Server generieren und zum Client schicken
http:/www.aspheute.com/artikel/20010305.htm
Excel Diagramme als GIF's serven
http:/www.aspheute.com/artikel/20010309.htm
Serverdaten clientseitig in Exceltemplates importieren
http:/www.aspheute.com/artikel/20020128.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.