Hallo Julia,

�ber Excel kann man das ganz einfach l�sen. Als folge findest du eine
Beschreibung
Das Einlesen der Daten
Im Gegensatz zum Sourcecode des Vorg�ngerartikels �berlappen sich die
Instanzen der Datenbankverbindung mit dem des Excel Objektes nicht mehr. Das
hat den Vorteil, da� wenn Probleme bei der Datenakquirierung auftreten (z.B.
Serverbreakdown) nicht mehr zwei Objekte gleichzeitig offen sind - was vor
allem bei out-of-process Komponenten wie Excel ein enormer Vorteil ist.

Die Daten aus der Access-Datenbank werden daher jetzt vorerst in einem Array
gespeichert. Das hei�t, ich kann nun ruhig die Verbindung zur Datenbank nach
Beendigung des Transfers schlie�en und erstelle erst jetzt die Instantz des
Excel Objektes.

Sehen wir uns nun die neue Variante an (GenXlsChart.asp):

...
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
strConn = strConn & Server.MapPath("Sales00.mdb")
strQuery = "SELECT ProductName,ProductIncome FROM ProductSales"

objConn.Open strConn

objRS.Open strQuery, objConn

If Not objRS.EOF and Not objRS.BOF Then
  arrData = objRS.GetRows()
Else
  bNoRecords = True
End If
...

Mit der GetRows Methode werden die Datens�tze gewonnen und im Array arrData
gespeichert. Wenn dieser Vorgang abgeschlossen ist, kann man also die
Verbindung zur Datenbank schlie�en und die f�r die Verbindung ben�tigten
Objekte wieder sicher zerst�ren.

Nun kann man wieder auf die im Vorg�ngerartikel gezeigten Methoden
zur�ckgreifen um z.B. �berschriften, Beschreibungstext, etc. in das
Tabellenblatt einzuf�gen. Da dies ja Thema des vorigen Artikels war, m�chte
ich dies hier nicht noch einmal erl�utern.

Da die Datens�tze in einem Array gespeichert wurden, mu� man nat�rlich das
Zuweisen in die entsprechenden Zellen ein wenig ab�ndern. Dies habe ich
einfach mit einer For ... Next Schleife erledigt:

For i = 0 To Ubound(arrData,2)
    xlBook.Sheets("Data").Cells(iRow+i,1).Value = arrData(0,i)
    xlBook.Sheets("Data").Cells(iRow+i,2).Value = arrData(1,i)
    xlBook.Sheets("Data").Cells(iRow+i,2).NumberFormat = "$#,##0.00"
Next

Beachten Sie, da� das Array in der umgekehrten Reihenfolge bef�llt wurde.
Daher stehen die auszulesenden Indizes in der zweiten Spalte der Klammern
des Arrays:

...
xlBook.Sheets("Data").Cells(iRow+i,1).Value = arrData(0,i)
...

Die Diagramm-Generierung
Nun sind wir endlich soweit, da� wir die Daten visualisieren k�nnen. Ich
habe mir f�r diesen Artikel zwei unterschiedliche Typen ausgesucht. Ein 3D
Pie Chart - Kuchen-Diagramm - in Explosionsdarstellung (xl3DPieExploded) und
ein 3D Column Chart - S�ulen Diagramm - (xl3DColumnClustered).

Beim Codieren ist auf die Syntaxunterschiede zu achten. Denn m�hsamerweise
verwenden VBA und VBScript unterschiedliche Syntaxe im Bezug auf das Excel
Objekt. Was sich also auf den ersten Blick als logisch erweist, da es ja
zwei unterschiedliche Sprachformen sind, wird dann beim Codieren zur Qual.
Also Makro aufzeichen lassen und in ASP Wrapper einf�gen ist nicht - und
auch wenn es so sch�n einfach w�re.

Erstellen wir nun den allgemeinen Chart-Teil:

xlBook.Charts.Add
xlBook.ActiveChart.Name = "BarGraph"
xlBook.Charts("BarGraph").SetSourceData
(xlBook.Sheets("Data").Range("A4:B9"))

Hier wird ein neues Diagramm (Chart) innerhalb des xlBook Objektes erstellt
und danach wird dem Chart der Name "BarGraph" zugewiesen. F�r die Erstellung
eines neuen Diagramms wird deshalb Charts (in der Mehrzahl) verwendet, da es
eine Collection signalisieren soll.

Die Festlegung des Diagrammtyps
Diagrammtypen gibt es in Excel nun viele. Um sie auch au�erhalb von VBA
verwenden zu k�nnen, ben�tigen Sie die zum Diagramm zugeh�rige numerische
Konstante. Der Einfachheit halber habe ich, wie schon erw�hnt, nur zwei aus
den vielen M�glichkeiten die Excel bietet ausgew�hlt.

F�r das 3D Pie Chart m�ssen Sie folgenderma�en vorgehen:

'--- 3DPieExploded
xlBook.Charts("BarGraph").ChartType = 70
xlBook.Charts("BarGraph").PlotBy = 2

Dieses 3D Pie Chart (es gibt auch andere Kuchen-Diagramm Typen) hat als
Konstante den Wert 70. Damit das Diagramm auch richtig angezeigt wird,
m�ssen wir noch die Plot-Order setzen. Hier soll n�mlich das Diagramm gem��
den Spalten (Columns) gezeichnet werden. Die hierf�r verwendete Excel
Konstante xlColumns hat den numerischen Wert von 2.

Nach dem Ausf�hren des ASP Scripts auf einem Web Server - der den obig
genannten Anforderungen entspricht - und lokaler Abspeicherung der Excel
Datei sieht das Kuchen-Diagramm dann so aus:



Im anderen Fall, der Darstellung als 3D S�ulen Diagramm erh�lt man folgendes
Ergebnis:



Um die S�ulendarstellung zu erstellen ist folgender Code notwendig:

'--- 3DColumns
xlBook.Charts("BarGraph").ChartType = 54
xlBook.Charts("BarGraph").PlotBy = 1
xlBook.Charts("BarGraph").HasAxis(1) = 0

F�r diesen Diagrammtyp und die vorliegenden Daten ist die reihenm��ige
Anordnung zu w�hlen (xlRows = 1). Da wir bei dieser Darstellung eigentlich
keine Kategorienachsenbeschriftung (xlCategory = 1) ben�tigen, setzen wir
sie auf 0 (entspricht False).

Damit w�ren wir schon fast fertig. Damit es bei der Generierung der Excel
Dateien am Server nicht zu Problemen kommt, l�sche ich eine eventuell
vorhandene Datei bevor ich die neue, generierte Datei am Web Server
speichere. Dies ist einfach mit dem FileSystemObject gel�st:

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(Server.MapPath(strFileName))) Then
   Set MyFile = fso.GetFile(Server.MapPath(strFileName))
   MyFile.Delete
End If

xlSheet.SaveAs Server.MapPath(strFileName)

Zuerst wird mit der FileExists Methode �berpr�ft ob es eine Datei gleichen
Namens gibt und f�r den Fall, da� die Expression der If-Verzweigung True
zur�ck gibt, wird sie mit der Delete Methode des FileSystemObjects gel�scht.

Abschlie�end, gleich wie im vorigen Artikel, wird die Excel-Datei mit der
FileCache 2.1 Komponente von AlphaSierraPapa.com zum Client geschickt.

Schlu�bemerkung
Nun sind wir schon ein gr��eres St�ck weiter - die Daten werden nicht nur
�bersichtlich in einer Tabelle gespeichert und textuell formatiert, sondern
auch mit Hilfe der Charts Collection des Excel Objektes in Form eines
ausw�hlbaren, passenden Diagrammtyps dargestellt.

Download des Codes
http://www.aspheute.com/Code/20010307.zip <-- Klicke hier, um den Download
zu starten.


-----Urspr�ngliche Nachricht-----
Von: Julia Mayer [mailto:[EMAIL PROTECTED]]
Gesendet: Sonntag, 23. September 2001 17:03
An: ASP Diskussionsliste fuer Anfaenger
Betreff: [aspdebeginners] diagramme.........


ich versuche seit langer zeit diagramme herzustellen.
linien.- und kuchendiagramme..........
kann mir jemand einen rat geben, wie ich da anfangen soll? ich muss glaub
ich im code einen neuen objekt machen........keine ahnung wie ich anfangen
soll........
warte auf interessante antworten, die mir weiterhelfen.
danke schon im voraus....
mfg julia

_________________________________________________________________
Downloaden Sie MSN Explorer kostenlos unter http://explorer.msn.de/intl.asp


| Oft Gefragtes: http://www.aspgerman.com/aspgerman/faq/
| [aspdebeginners] als [EMAIL PROTECTED] subscribed
| http://www.aspgerman.com/archiv/aspdebeginners/ = Listenarchiv
| Sie knnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdebeginners.asp


| Oft Gefragtes: http://www.aspgerman.com/aspgerman/faq/
| [aspdebeginners] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdebeginners/ = Listenarchiv
| Sie knnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdebeginners.asp

Antwort per Email an