DevTrain

Autor: Bernhard Elbl

Excel-File aus Vorlage generieren

Ziel: Ein Excel-File(hier Preisliste) mit coolen Design und möglichst wenig VBA-Befehlen und Aufwand dynamsich am Server erzeugen.
Mit VBA ist es sehr kompliziert, ein schönes Excel-File zu genieren. Tabellen, Farben, Formatierungen, Bilder einfügen usw....
Alles in VBA zu schreiben ist langwierig und den Aufwand eigentlich nicht wert. Einfacher ist es eine Vorlage(unten zu finden) in Excel selbst zu schreiben und Sie auf dem Server abzulegen. Diese Excel-Vorlage öffne ich über ASP und fülle Sie mit aktuellen Werten aus der Datenbank. Die vollstängige Preisliste(unten zu finden) speichere ich dann als neues File am Server ab.

Vorteile:

- Nach belieben kann ein aktuelles Excel-File automatisch geniert werden.
- Änderungen im Design und im Inhalt sind schnell zu machen. Einfach eine neue Vorlage in Excel erstellen und minimale Änderungen im Code vornehmen, fertig.


Hier das Script für die Seite...makeExcel.asp
1. Teil:
Überprüfen von Existenz der kompletten Preisliste(xlsfull.xls) und evtl. Löschen der Datei. Dies geschieht mit Hilfe des Scripting.FileSystemObjektes

<%@ Language=VBScript %>
<%
strVorlage = Server.MapPath("./Excel/xlsvorlage.xls")
strFull = Server.MapPath("./Excel/xlsfull.xls")
set Datei = Server.CreateObject("Scripting.FileSystemObject")
if Datei.FileExists(strFull) = true then
 Datei.DeleteFile strFull
end if


2. Teil:
Werte aus der Datenbank lesen und in ein Array schreiben

strSQL = "SELECT * FROM Products"
set conn = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.Recordset")
 conn.Open "Provider=SQLOLEDB.1;", "admin", ""
 rs.Open "Products",conn,adOpenKeyset,adLockOptimistic
 varCount = rs.RecordCount-1
 dim Arr()
 redim Arr(varCount,2)
 
 rs.MoveFirst
 if not rs.EOF and not rs.BOF then
  do while not rs.EOF
   Arr(i,0) = rs.Fields("ProductID")
   Arr(i,1) = rs.Fields("ProductName")
   Arr(i,2) = rs.Fields("UnitPrice")
   rs.MoveNext
   i = i + 1
  loop
 else
  Response.End
 end if 
   
 rs.Close
set rs = nothing
 conn.Close
set conn = nothing


3. Teil: - Excel-Generierung
Und jetzt die Excel-Generierung. TIP: Vergleichen Sie den Code mit der Vorlage(unten), um Ihn besser zu verstehen.

Set oExcel = CreateObject("Excel.Application")   ' --- Server.CreateObject ist schneller
    With oExcel
'--- Excel-Vorlage öffnen
        .Workbooks.Open (strVorlage)
'--- kopieren und einfügen der Tabellen- und DM-Formatierung für alle notwendigen Bereiche
  .ActiveSheet.Range("C7:E7").Copy
  .ActiveSheet.Range("C8:C" & cint(varCount + 7)).PasteSpecial
  i = 0
'--- durchlaufen des Arrays
  for i = 0 to varCount
'--- Werte in Zellen des Excel-Sheets schreiben.
'--- i+7 --> weil die Tabelle in Excel im Range("C7") beginnt
   .ActiveSheet.Range("C" & cint(i + 7)) = arr(i,0)
   .ActiveSheet.Range("D" & cint(i + 7)) = arr(i,1)
   .ActiveSheet.Range("E" & cint(i + 7)) = arr(i,2)
  next
'--- Breite der Spalte D wird auf "Benötigte Breite" vergrößert(od. verkleinert)
  '.Columns("D:D").EntireColumn.AutoFit
'--- Speichern der Datei in neuem File
  .ActiveWorkbook.SaveAs strFull
'--- schließen des ActiveWorkbooks - False als Eigenschaft für Änderungen speichern
        .ActiveWorkbook.Close False
'--- Quit schließt die Excel-Anwendung
'--- (Wichtig!!! ansonsten bleibt Excel im Speicher(ca.5 MB)
        .Quit
    End With
'--- Objekt zerstören
Set oExcel = Nothing
%>

Unter verlinkte Dokumente finden Sie den kompletten Source-Code mit den Excel-Files.
Die Excel-Generierung findet nur im 3. Teil statt! Teil 1 und 2 sind nur zur Ausarbeitung.


Erfasst am: 04.05.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=441
© Copyright 2003 ppedv AG - http://www.ppedv.de