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 %> |