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

SA ExcelWriter in Action

Geschrieben von: Christian Holm
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Nach der kurzen Vorstellung der Software Artisans ExcelWriter Komponete im Artikel Die SA Excel Writer Komponente, kann die Komponente nun zeigen was sie kann. Anhand eines Beispiels wird gezeigt wie Werte in Zellen programmatisch eingefügt werden und eine Formatierung angewandt wird.

Um das Beispiel etwas interessanter zu machen, lesen wir Datensätze einer MS Access Datenbank ein und wenden zudem auch noch eine kleine Berechnugnsformel an.

Das Beispiel

Wichtig: Dem Artikel liegt die gratis downloadbare Evaluierungsversion zugrunde, die gegenüber der kostenpflichtigen Vollversion einen eingeschränkten Funktionsumfang hat.

Wir lesen aus der Products Tabelle der Northwind MS Access Datenbank die Spalten ProductName, UnitPrice und UnitsInStock aus. Danach werden wir uns aus dem Listenpreis (UnitPrice), der aus der Datenbank stammt, mithilfe einer kleinen Formel den Bruttopreis (also inklusive Mehrwertsteuer) ausrechnen. Damit die generierte Excel-Tabelle auch Spaltenüberschriften bekommt, werden wir diese programmatisch erstellen und diese auch formatieren.

Mit diesem Beispiel hätten wir dann alle wichtigen Grundfunktionen der Komponente abgedeckt. Schreiten wir nun zur Ausführung (XWri_Tab.asp).

<% @LANGUAGE = VBScript %>
<!--METADATA TYPE="TypeLib" UUID="7BCD2133-64A0-4770-843C-090637114583" -->
<%
  Option Explicit
  Dim objConn, objRS, HeadingStyle, objXlw, objWS
  Dim strConn, strSQL, i, Rows, cell, n

  Set objConn = Server.CreateObject("ADODB.Connection")

  strConn = "DSN=Northwind;UID=sa; PWD=;"
  
  objConn.Open strConn

  Set objRS = Server.CreateObject("ADODB.Recordset")
  Set objRS.ActiveConnection = objConn

  strSQL ="SELECT Products.ProductName, Products.UnitPrice,Products.UnitsInStock "
  strSQL = strSQL & "FROM Products"

  objRS.Open strSQL 
...

Im ersten Teil des Sourcecodes eigentlich nichts Aufregendes. Zuerst die Angabe der Verwendeten Sprache, dann die TypeLib Bindung, sowie die Variablendeklarationen - da ja Option Explicit verwendet wird. Es folgt die Erstellung des Connection Objekts (objConn), die Deklaration dessen und schließlich die Öffung der Verbindung zur Datenbank.

Nun die Erstellung des Recordset Objekts (objRS) und die Zuweisung des Connection Strings. Danach die Deklaration der SQL-String Variable (strSQL) und ihre Definition.

Set objXlw = Server.CreateObject("Softartisans.ExcelWriter")
Set objWS = objXlw.Worksheets(1).Cells

set HeadingStyle = ObjXlw.CreateStyle
	HeadingStyle.Font.Size = 12
	HeadingStyle.Font.Bold = true

for i = 1 to 4
	objWS(1, i).Style = HeadingStyle

next

objWS("A1").Value = "Produktname"
objWS("B1").Value = "Listenpreis"
objWS("C1").Value = "Lagerbestand"
objWS("D1").Value = "Preis inkl MwSt"

Als nächstes erstellen wir das ExcelWriter Objekt objXlw und ein Worksheet, das die aus der Datenbank angeforderten Daten enthalten soll.

Um die Spaltenüberschriften der Tabelle formatieren zu können, erstellen wir uns einen Schriftstil (HeadingStyle) indem wir die CreateStyle Methode des ExcelWriter Objekts verwenden. Mit den beiden Eigenschaften Font.Size bzw. Font.Bold setzen wir die Schriftgröße bzw. den Fettdruck.

Um den Schriftstil nun auch anzuwenden, verwenden wir einfach eine for-Schleife. Die Beschriftung der Tabellenspalten erfolgt mit Value.

Rows = objWS.CopyFromRecordset(objRS, False, 2, 1)


for n = 2 to Rows
   objWS(n,4).Formula = "=b" & n & "*1.2"

next

objXlw.Save "database.xls", saOpenInPlace


objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Set objXlw = Nothing

%>

Mit der CopyFromRecordSet Methode importieren wir die Datensätze in die Excel-Tabelle. Die Methode schreibt alle Datensätze, die das Recordset enthält in die Tabelle. Die Methode hat folgende Parameter:

Rows = objWS.CopyFromRecordset(ADO-RecordSet, [ShowHeaders (True/False)]
		[FirstRow], [FirstColumn], [MaxRows], [MaxColumns])

Wenn Parameter nicht explizit angegeben werden, werden die Standardwerte des Microsoft BIFF7 Formats verwendet:

Da wir ja unsere eigenen Spaltenüberschriften verwenden wollen, setzten wir ShowHeaders auf "False". Damit sie nicht durch die Daten überschrieben werden fügen wir die Daten aus dem Recordset erst in der Spalte A2 ein (FirstRow = 2, FirstColumn = 1)

Nun erstellen wir uns noch eine kleine Formel um die Mehrwertsteuer zu berechnen. Dies geschieht einfach mit der Angabe von Formula und dem Formelausdruck, der wie in Excel üblich anzugeben ist.

Um die Datei lokal abspeichern zu können, verwenden wir die Save Methode des ExcelWriter Objekts.

Abschließend "räumen" wir noch den Speicher auf indem wir die benötigten Resourcen wieder freigeben bzw. die DB-Verbindung schließen und die verwendeten Objekte zerstören.

Nachdem die Datei lokal abgespeichert wurde, können Sie diese in MS Excel öffen, und falls nötig später editieren. Das Ergebnis unseres Beispiels sieht dann so aus:

Schlußbemerkung

Mit der ExcelWriter Komponente von Software Artisans können Sie programmatisch editierbare Excel Spreadsheets erstellen. Dieser Artikel zeigte Ihnen die wichtigsten Grundfunktionen der ExcelWriter Komponente.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001207.zip

Verwandte Artikel

Die SA Excel Writer Komponente
http:/www.aspheute.com/artikel/20001204.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
Serverdaten clientseitig in Exceltemplates importieren
http:/www.aspheute.com/artikel/20020128.htm

Links zu anderen Sites

SA ExcelWriter Demoseite
http://demo.softartisans.com/ExcelWriter/default.asp
SA ExcelWriter Seite
http://www.softartisans.com/excelwriter.html
SoftwareArtisans
http://www.softartisans.com/

 

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