Wenn man mehr als nur ein Tabellenblatt oder den Zugriff auf einige der VBA-Funktionen benötigt, muss man zum Erstellen der Datei ActiveX verwenden. Bei diesem Ansatz erzeugt man eine Instanz von Excel auf dem Client und übergibt dieser dann die Daten und Funktionsaufrufe.
Damit dies funktioniert, muss der Benutzer die ActiveX-Einstellungen im Internet Explorer auf Eingabeaufforderung oder Aktivieren für die korrekte Zone eingestellt haben. (Derzeit unterstützt nur der Internet Explorer diese Funktionalität.)
Zuerst wird das Excel-Objekt Xcl erstellt. Dieses bildet die Verbindung zwischen dem Code und Excel. Der Rest des Codes befindet sich in einer VBScript-Subroutine namens StartExcel. Als Nächstes wird die Funktion Server.CreateObject verwendet, um eine Verbindung zu Excel herzustellen und diese dem Objekt Xcl zuzuweisen. Als nächstes wird die Sichtbarkeit des Objekts auf true gestellt und diesem eine neue Arbeitsmappe hinzugefügt:
Eine Standard-Arbeitsmappe in Excel besteht aus drei Tabellenblättern. Für jedes weitere benötigte Tabellenblatt muss man die Funktion Add aufrufen. In diesem Beispiel reicht die standardmäßige Anzahl von Tabellenblättern aus.
Wie Listing C zeigt, wird das erste Tabellenblatt in der Arbeitsmappe aktiviert, so dass es zum aktiven Tabellenblatt wird. Die Breite der ersten beiden Spalten wird auf 50 Zeichen eingestellt und der Zeilenumbruch für diese Spalten wird aktiviert. Für numerische Daten wird eine Format-Maske eingesetzt und die Zellenausrichtung für den Bereich der Zellen von A1 bis B1000 auf links eingestellt. Der Grund für die Verwendung fester Werte wie z. B. 4131 statt der Excel-Konstanten xlLeft liegt darin, dass diese Konstanten bei der Interaktion über ActiveX nicht sichtbar sind.
Als nächstes werden die Hintergrundfarbe der ersten Zelle eingestellt und einige Werte in das Tabellenblatt eingefügt, als Beispiel für eigene Daten. Und schließlich wird in diesem Abschnitt dem aktuellen Tabellenblatt der Name „My First Worksheet“ gegeben.
Zuletzt wird der Save As-Dialog aufgerufen [Speichern unter…], dem als Vorschlag für den Dateinamen „Testing Excel Extraction“ übergeben wird. Falls der Benutzer einen anderen Dateinamen eingibt, ist das auch in Ordnung, doch falls er den Dialog abbricht, wird dies registriert und der voreingestellte Name verwendet. Danach wird das Objekt zerstört, indem sein Wert auf nothing gesetzt wird, und der Benutzer auf eine andere Seite umgeleitet. Damit der Code ausgeführt wird, wird die Funktion so eingestellt, dass sie ausgeführt wird, sobald die HTML-Seite geladen wird. Dazu dient der onLoad-Handler.
In manchen Fällen kann es vorkommen, dass man auf diese Weise Excel-Funktionsaufrufe übergeben muss, zum Beispiel SUM [SUMME]. Dazu übergibt man die vollständige Zeichenkette so wie man sie auch in Excel eingeben würde. Dieselben Ergebnisse kann man auch mit VBA-Code erzielen, wie Listing D zeigt.
In diesem Beispiel werden die Werte in den ersten beiden Zellen der zweiten Spalte addiert und das Ergebnis in die dritte Zeile der zweiten Spalte eingefügt. In der vierten Zeile wird diese Summe mit 2 multipliziert.
Auf Anregung eines Kollegen habe ich angefangen, einen Teil der Funktionalität in JavaScript auszulagern. Wie Listing E zeigt, ist diese Umwandlung recht einfach – es genügt fast, alle Dims durch Vars auszutauschen und ein Semikolon am Ende jeder Zeile hinzuzufügen.
Wie man sieht, gibt es nur geringe Unterschiede zwischen dieser und der VBScript-Version. Die Hauptunterschiede betreffen das Einstellen einiger Layout-Werte im VBA-Code.
Es ist sicherlich möglich, die Funktionalität noch weiter auszubauen. Vor kurzem habe ich an einer Methode gearbeitet, um Daten aus einer Datenquelle in ein Formular einzufügen und dem Benutzer zu erlauben, die Daten zu bearbeiten – wobei sich die Feldgröße den eingegebenen Daten anpasst –, und die Daten dann samt etwaiger Änderungen in Excel zu exportieren. Dies wurde mithilfe von clientseitigem JavaScript erreicht, um sich im Formular bewegen zu können, statt dieses in einer Funktion fest einzustellen.
Hinter 84 Prozent der Zwischenfälle bei Herstellern stecken Schwachstellen in der Lieferkette. Auf dem Vormarsch…
Es kommt angeblich 2028 auf den Markt. Das aufgeklappte Gerät soll die Displayfläche von zwei…
Das System basiert auf Hardware von HPE-Cray und Nvidia. Die Inbetriebnahme erfolgt 2027.
Die Bundesnetzagentur hat ihr Gigabit-Grundbuch aktualisiert. Drei von vier Haushalten sollen jetzt Zugang zu Breitbandanschlüssen…
Mit dem Internet verbundene Digitale Bilderrahmen oder Mediaplayer können mit Schadsoftware infiziert werden und sind…
Schädliche Apps können unter Umständen einen Systemabsturz auslösen. Mindestens eine Anfälligkeit erlaubt eine Remotecodeausführung.