Excel Dateien ohne Excel anzeigen
Geschrieben von: Hubert Daubmeier 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. Die Excel-Datei vorbereitenZum 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:
Der Code zur WiederverwendungNachfolgend 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 Der Code im ÜberblickDas 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 %> Die EndmontageBleibt 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>
SchlußbemerkungDas 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. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Datenbank zur Weiterbearbeitung in Excel bereitstellen Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |