Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Excel Diagramme als GIF's serven

Geschrieben von: Christian Holm
Kategorie: ASP Tricks

Dieser Artikel zeigt Ihnen wie Sie Grafiken aus einem serverseitig generierten Microsoft Excel Diagramm erstellen können. Die Grafiken werden dabei als GIF-Dateien im Server Pfad abgespeichert. Diese können dann von anderen Scripts weiterverwendet werden, oder einfach zum Client geschickt werden.

Der heutige Artikel baut auf den beiden Artikeln Ein Excel-Sheet am Server generieren und zum Client schicken und Ein Excel-Diagramm am Server generieren und zum Client schicken auf. Daher ist, wie in den vorigen beiden Artikeln, auch diesmal der Web Server dementsprechend zu konfigurieren, um den Beispiel Sourcecode erfolgreich verwenden zu können. Die nötigen Vorbereitungen entnehmen Sie bitte aus einem der genannten Artikel.

Seit Beginn dieser Artikelserie, die sich mit dem serverseitigen Generieren eines Excel SpreadSheets inklusive ADO Datenbankabfrage und mit der Erstellung eines passenden Charts befaßt, erweitern wir die Funktionalität - und heute wieder, und zwar durch eine browserfähige Grafik des generierten Diagramms. Der Vorteil: der Client braucht kein Excel, um das Diagramm betrachten zu können.

Die Erstellung einer Gif-Datei ist als zusätzliches Feature in einer Speicheroption von Excel versteckt. Der "Speichern als" Dialog bietet nämlich die zusätzliche Möglichkeit das Workbook im HTML-Format abzuspeichern. Dabei werden vorhandene Diagramme als GIF-Datei abgespeichert - praktisch! Dies ist dann unsere Grafik. Die erstellten Grafiken haben eine brauchbare Auflösung von 800x600 Pixel.

Da wie gesagt der Artikel auf die obig genannten Artikel aufbaut, interessieren wir uns nur für den heute veränderten Teil. Der hier verwendete Sourcecode fokusiert sich dabei speziell nur auf die Erstellung der Grafik. Das heißt der Code für die Formatierung des SpreadSheets ist rausgeflogen, da uns ja heute nur die Diagrammerstellung und der veränderte Speichervorgang interessiert.

Beginnen wir mit der Sourcecodebesprechung an der Stelle, wo das zu generierende Diagramm erstellt wird. Die Datenbankoperationen sind bereits abgschlossen und die dafür benötigte Verbindung ist nun wieder geschlossen. Die benutzten Objekte sind zerstört. Die Daten sind auch schon in die Zellen des SpreadSheets eingetragen und wir treffen nun die Vorbereitungen für das Diagramm:

...
'--- Creating Chart
xlBook.Charts.Add
xlBook.ActiveChart.Name = "Graph"
xlBook.Charts("Graph").SetSourceData (xlBook.Sheets("Data").Range("A4:B9"))

'--- 3DPieExploded
With xlBook.Charts("Graph")
    .ChartType = 70
    .PlotBy = 2
    .HasTitle = 1
    .charttitle.Characters.Text = "Overall Product Sales 2000"
    .charttitle.Font.Name = "Tahoma"
    .charttitle.Font.FontStyle = "Bold"
    .charttitle.Font.Size = 30
    .charttitle.Font.ColorIndex = 3
End With
...

Großteils nichts Neues. Da wir zum Schluß nur mehr eine Gif-Datei mit dem entsprechenden Diagramm erhalten wollen, ist es ganz angebracht z.B. dem Diagramm eine Überschrift zu verpassen. Diese habe ich optisch ein klein wenig aufgeputzt. Betont nur ein klein wenig, da für die meisten Business-Grafiken ein 70er Jahre LSD-Trip Design wohl fehl am Platz ist. Außerdem, wer schreibt schon gern freiwillig Unmengen Code, der "nur" den Zweck der Formatierung hat.

Da nun der Diagrammcode soweit fertig ist, können wir eigentlich schon die Datei abspeichern. Bevor wir dies codieren wollen, sind aber noch einge Punkte zu berücksichtigen.

Wie schon erwähnt wollen wir eigentlich nur eine Grafik des generierten Diagramms, und das möglichst einfach und schnell. Da aber im Gegensatz zu Microsoft PowerPoint eine direkte Speicherung der Datei in einem Grafikformat nicht so einfach möglich ist, verwenden wir nun die Option Speichern als HTML. Dabei werden wie gesagt unter anderem Diagramme als Gif-Datei abgespeichert.

Damit man aber die Excel Datei bequem mit einem Browser betrachten kann, werden auch andere Dateien und ein Verzeichnis erstellt. Da uns diese Dateien heute aber nicht wirklich interessieren, löschen wir sie einfach. Ist zwar nicht die besonders elegante Methode zu einer Diagrammgrafik zu kommen, aber sie ist einfach und bis jetzt hat noch immer der Zweck die Mittel geheiligt.

Der nächste Punkt der zu erwähnen ist, ist daß sich der Web Server verschluckt, wenn mehrere User die ASP Seite gleichzeitig verwenden wollen (und wir auf die gleiche Datei schreiben). Das läßt sich mit der GetTempName Methode von VBScript umgehen. Diese drückt Ihnen nämlich einen einzigartigen Dateinamen in die Hand - somit wäre auch dieses Problem gelöst. Gehen wir also weiter im Sourcecode.

Set fso = CreateObject("Scripting.FileSystemObject")
strTempName = fso.GetTempName    
strFileName= Replace(strTempName,".tmp",".htm")

xlBook.Charts("Graph").SaveAs Server.MapPath(strFileName),44

xlApp.Application.Quit

Wir erstellen uns also mit der GetTempName Methode einen zufällig generierten Dateinamen, den wir in der Variablen strTempName speichern. Sagte ich eigentlich "DateiNAME"? Nun, die Methode ist ja an sich ganz praktisch: wir erhalten einen beliebigen Namen und zusätzlich aber auch eine .tmp Extension. Dies ist in anderen Fällen natürlich praktisch - in unserem Fall aber zuviel des Guten.

Deshalb schreiben wir eine Zeile mehr Code und tauschen mit der Replace Methode die .tmp Erweiterung mit der benötigten .htm. Nun können wir die Datei mit dem zufällig generierten Namen speichern. Damit wir Excel nicht verwirren, da es standardmäßig die Endung .xls erwartet, versichern wir Excel, daß wir wissen was wir tun. Dies erreichen wir mit der Angabe von 44 - daß wir eben im HTML-Format speichern wollen.

44 ist das numerische Äquvivalent zur Excel Konstante xlHtml. Diese ist wiederum Member der XlFileFormat Collection - also nix mit Voodoo, alles legal! Die Dateien, die durch diese Option erstellt werden, sind nun am Web Server gespeichert. Nun ist es höchste Zeit mit Application.Quit Excel zu schließen.

Nun können wir auch, um ein wenig aufzuräumen, die restlichen Objekte, die von Excel gebraucht wurden getrost vernichten. Was noch fehlt ist, und diese Schritte sind optional, daß wir alle generierten Dateien bis auf unsere GIF Datei löschen. Für den Fall, daß Sie auch die generierten Html und anderen Dateien benötigen ist der nun folgende Code überflüssig. Heute wollen wir aber eben nur die Grafik - also müssen wir folgendes programmieren:

strTempDir =Replace(strFileName,".htm","_files")

If (fso.FileExists(Server.MapPath(strTempDir & "\image001.gif"))) Then
    Set MyFile = fso.GetFile(Server.MapPath(strTempDir & "\image001.gif"))
    strGifName = Replace(strTempDir, "_files",".gif")
    MyFile.Move Server.MapPath(strGifName)
    
    strDelFile=Replace(strTempDir, "_files",".htm")
    Set MyDelFile = fso.GetFile(Server.MapPath(strDelFile))
    MyDelFile.Delete
    fso.DeleteFolder (Server.MapPath(strTempDir))
End If

Die zusätzlichen Dateien, außer der Html-Datei die zum betrachen des Workbooks erforderlich ist, werden immer in einem Unterverzeichnis gespeichert. Dieses Unterverzeichnis setzt sich aus dem Dateinamen der gespeicherten Datei und dem Zusatz "_files" zusammen. In diesem Unterverzeichnis befindet sich auch unsere heiß ersehnte Grafik!

Standardmäßig setzt sich der Dateiname der Grafik aus "image", einer dreistelligen Zahlenfolge, die als fortlaufende Numerierung dient und eben der Dateiendung *.gif zusammen. Zuerst suchen wir mit der GetFile Methode nach dieser Datei. Da wir in diesem Beispiel nur ein Diagramm erstellen, brauchen wir ja auch nur nach einer, eben dieser zu suchen. Deshalb habe ich hier auch der Einfachheit halber den Dateinamen hardcodiert.

Da ja unsere Grafiken einzigartig sein sollen, wenden wir wieder die Replace Methode an, und können uns somit einen neuen einzigartigen Namen aus dem noch zur Verfügung stehenden Variablen strTempDir basteln.

Dann verschieben wir die umbenannte Grafik mit der Move Methode eine Ebene höher. Nun können wir ruhig das nicht mehr benötigte Verzeichnis samt der Html-Datei löschen. Da diese Html-Datei und das dazugehörige Verzeichnis nach dem generierten Namen der GetTempName Methode benannt wurden, müssen wir das bei den Löschaktionen berücksichtigen.

Wie erwartet bleibt nach vollständigem Ablauf des Scripts nur mehr die Grafik übrig. Diese, ich zeige ihnen wieder beide aus dem Script generierbaren Diagrammtypen, sehen dann hier zweckmäßg verkleinert so aus:

Das Säulen Diagramm (Original: 800x600x256):

Das Kuchen Diagramm (Original: 800x600x256):

Schlußbemerkung

Nun hätten wir die wichtigsten Punkte zum Thema Excel-SpreadSheets Generierung besprochen. Sie können nun ein SpreadSheet mit Daten aus einer Datenbank samt dazugehörigen Diagramm und sogar einer Grafik für Rechner ohne Excel erstellen. Und dies wird alles ohne menschliches Zutun am Web Server generiert.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Ein Excel-Diagramm am Server generieren und zum Client schicken
Ein Excel-Sheet am Server generieren und zum Client schicken
Excel Dateien ohne Excel anzeigen
Serverdaten clientseitig in Exceltemplates importieren

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.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.