Zugriff aus einer eigenen ABAP-Entwicklung auf EXCEL

Bevor Sie aus Ihrer Anwendung auf Excel zugreifen können müssen Sie mit regedit und SOLE prüfen ob die OLE - Applikation die Sie verwenden wollen  ( Excel ), sowohl im R/3 - System, als auch beim Betriebssystem registriert ist.

Wenn beide Registrierungseinträge vorhanden sind kann es losgehen.

Wenn wir auf Objekte außerhalb des R/3 Systems zugreifen wollen ( wollen wir, nämlich auf Excel auf der Workstation ) brauchen wir eine Möglichkeit dieser Anwendung Anweisungen zu übermitteln. Dies bedeutet wir müssen auf den Arbeitsspeicher den diese Anwendung oder Teile dieser Anwendung verwenden zugreifen. Dies geschiet über Zeiger ( c läßt grüßen ), sogenannte handles. Für diese handles brauchen wir besondere Variablen, sogenannte Pointer. Diese sind im Include ole2incl definiert.

Variablen Type - Definition

Variable für die Applikation
Variable für eine Zelle 
Variable für eine Tabelle

Wir haben sowohl für die Applikation, die Zelle als auch für die Tabelle den selben Variablentyp. Dies funktioniert weil wir bei allen drei Objekten nicht den Platz im Arbeitsspeicher Ansprechen sondern immer nur die Startadresse des belegten Arbeitsspeichers.

Mit den 4 Zeilen Quellcode haben wir schon die Voraussetzungen geschaffen um Daten mit Excel auszutauschen.

In dem folgenden Beispiel werden wir aus der Tabelle ZKUNDEN für alle Einträge die Namen in  einer Tabelle in Excel ablegen, anschließen Excel ermitteln lassen wieviel Einträge vorhanden sind. 
Tabelle die ausgelesen wird.

Die Verwendung von OLE - Anweisungen erzeugt häufig ein Commit Work, deshalb können wir die OLE - Anweisungen nicht in einer SELECT ... ENDSELECT - Schleife bearbeiten, sondern müssen eine Interne Tabelle verwenden.

Die Felder der Excel-Tabelle sollen dynamisch erst zur laufzeit des Programmes bestimmt werden.
aktuelle Zeile der Excel-Tabelle
Beschreibt die Zelle mit Spalte und Zeile
Text der in die Zelle geschrieben werden soll.

Das Excel Dokument soll auf dem Rechner des Anwenders gespeichert werden. Dafür benötigen wir eine Variable die einen Dateinamen beschreiben kann.

 

Der nun folgende Befehl löscht die Datei auf dem Rechner des Anwenders, falls die Datei vorhanden ist. Ich habe den Befehl hier aufgenommen, weil es mir eine Fehlerbehandlung in Excel erspart. Ich muß nicht mehr feststellen, ob die Datei schon vorhanden ist und überschrieben werden soll, oder ob noch garkeine Datei vorhanden ist.



Und jetzt gehts los.

Als erstes muß Excel auf dem Rechner des Anwenders gestartet werden. hierbei erhalte ich ein handle der in der Variablen excel gespeichert wird, so das ich später auf die Anwendung zugreifen kann.

Für unseren Fall wollen wir sehen was geschied, deshalb lassen wir alle Aktionen am Bildschirm ausführen. Für eine echte Anwendung sollte man aus Performance Gründen das Füllen der Tabellen nicht sichtbar laufen lassen, da die meiste Zeit für das Anzeigen am Bildschirm benötigt wird.

Bis jetzt haben wir lediglich Excel ohne einen Arbeitsbereich gestartet. Als nächstes brauchen wir von Excel ein handle für die Verwaltung der Arbeitsbereiche.

Nach dem wir nun auf den Verwaltungsbereich von Excel zugreifen können, lassen wir von Excel einen neuen Arbeitsbereich erstellen in dem wir dan unsere Daten bearbeiten können.

 Alles was wir jetz noch brauchen ist die Information, wo nun der neue Arbeitsbereich ist.

Jetzt holen wir uns die Daten die wir in Excel weiterverarbeiten wollen,

und bearbeiten diese in einer Loop-Schleife

Als erstes ermitteln wir die Zeile in der die Daten Abgelegt werden. genauso kann natürlich auch die Spalte ermittelt werden. Für unser Beispiel nehmen wir aber konstant die 3 Spalte der Excel-Tabelle.

Nun muß die Zelle in der wir die Datenablegen wollen bestimmt werden. Je nach dem ob wir deutsche oder englische *.dll verwenden muß die Notation entweder Z(eile) und S(palte) oder R(ow) und C(olum) sein. Ich habe englische *.dll wird meine Zelladresse wie folgt zusammen gesetzt.

Anschließend muß die Zelle in Excel zur aktiven Zelle werden.

Von Excel holen wir uns jetzt die Adresse des  Speicherplatz dieser Zelle

und füllen die Zelle mit dem Inhald des Feld namen der Kopfzeile unserer internen Tabelle.

Und beenden jetz unsere Schleife.

Etwas umständlicher ist es jetzt Excel feststellen zu lassen wieviele Einträge jetzt vorhanden sind.
Excel besitzt eine Formel die heißt COUNTA. Mit dieser Formel kann man ermitteln wieviel Werte in einem Bereich vorhanden sind. Dazu müssen wir natürlich den Bereich in einer für Excel verständlichen Form darstellen. Dies bedutet eine Darstellung relativ zu der Zelle die den Wert anzeigen soll also 
z.B.:  R[-10]C:R[-1] ( aktuell Zeile -10 aktuelle Spalte:aktuelle Zeile -1 aktuelle Spalte )

Die nächsten Zeilen dienen wieder zur Auswahl der aktiven Zelle.

Der Wert der jetzt in die Zelle geschrieben wird ist eine Formel die sich auf einen Bereich bezieht.

Als nächstes speichern wir die Tablle, drucken Sie auf dem Standarddrucker des Anwenderrechners aus und Beenden Excel.

Zum Schluß müssen wir noch den für die Anwendung reservierten Speicherplatz freigeben.