DevTrain

Autor: Bernhard Elbl

Office aus ASP und die Performance-Sache...

Jeder der Word, Excel oder sonst irgendeine Office-Application über ASP verwendet, der weiss, dass die Performance nicht so toll ist. Zwischen 5-10 MB in den Arbeitsspeicher laden um ein Office-Dokument zu generieren, das ist allerdings sehr Zeitaufwendig und die Performance ist futsch!
Jetzt gibt es zwei Möglichkeiten:
1. Sie kaufen sich Komponenten von Fremdherstellern, die Office-Dokumente schnell generieren können, oder
2. Sie verwenden folgendes Script um Ihrer ASP/Office-Application ein bischen Feuer zu machen.

Der Grund-Gedanke liegt darin, z.B. Excel schon bei starten der Application, also im Application_OnStart-Erreignis, zu starten. Hier also der Code für die Global.ASA...
<!--METADATA TYPE="TypeLib" NAME="Microsoft Excel 9.0 Object Library" UUID="{00020813-0000-0000-C000-000000000046}" VERSION="1.3"-->
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
 Set oExcel = Server.CreateObject("Excel.Application")
 Set Application("oExcel") = oExcel
 Set oExcel = Nothing
 Application("ExcelEnabled") = True
End Sub

Sub Application_OnEnd
 Set oExcel = Application("oExcel")
 oExcel.Quit
 Set oExcel = Nothing
 Set Application("oExcel") = Nothing
End Sub

</SCRIPT>

Excel wurde also gestartet und einer Application-(Objekt-)Variable verwiesen. Im Application_OnEnd-Erreignis wird Excel ordnungsgemäß beendet. Hier ist das Quit unbedingt notwendig, damit Excel beendet wird.

Und nun zum Aufruf von Excel auf einer ASP...
Die App-Var ExcelEnabled wird auf True überprüft und bei Erfüllung sofort auf False gesetzt. Dies dient der Sicherstellung, dass Excel nicht gleichzeitig verwendet wird. Excel darf nicht zweimal gleichzeitig verwendet werden, da es sich immer um die selbe "Excel-Version" eines Speicherabbilds handelt. Gleichzeitiges verarbeiten von zwei Scripten mit dem selbigen Objekt, könnte schnell zu einem Fehler führen. Nachdem Ende des Office-Scriptes wird die App-Var ExcelEnabled wieder auf True gesetzt, um Excel wieder zu Verfügung zu stellen.
<%@ Language=VBScript %>
<%
If Application("ExcelEnabled") = True Then
 Application("ExcelEnabled") = False
 Set oExcel = Application("oExcel")
 Set oWB = oExcel.Workbooks.Add
 Set oWS = oWB.Worksheets.Add
 oWS.Range("B2").Value = "Wird über IIS erzeugt"
 oWB.SaveAs Server.MapPath("./") & "Filesmappe1.xls"
 oWb.Close False
 Set oWS = Nothing
 Set oWB = Nothing
 Set oExcel = Nothing
 Application("ExcelEnabled") = True
Else
 %>
 Probieren Sie es Bitte später noch einmal!<br>
 <A HREF="officeperform.asp">officeperform.asp</A>
 <%
End If
%>


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