Code: Alles auswählen.
*---------------------------------------------------------------------*
* E X C E L *
*---------------------------------------------------------------------*
* Vorbesetzen und Füllen der Datenfelder einer Excel-Tabelle, alle *
* Aktionen im Hintergrund. *
*---------------------------------------------------------------------*
FORM upro-excel.
* Include-Baustein für OLE-Verarbeitungen
INCLUDE ole2incl.
* globale Variablen für OLE-Call
STATICS:
excel TYPE ole2_object,
application TYPE ole2_object,
books TYPE ole2_object,
book TYPE ole2_object,
sheet TYPE ole2_object,
cell TYPE ole2_object,
column TYPE ole2_object.
* Zeilen- und Spaltenzähler innerhalb der Excel-Tabelle
DATA:
zeile TYPE i,
sp TYPE i.
* MS Excel ausführen mit OLE und Daten exportieren
CREATE OBJECT excel 'EXCEL.SHEET'.
GET PROPERTY OF excel 'Application' = application.
SET PROPERTY OF application 'Visible' = 1.
CALL METHOD OF application 'Workbooks' = books.
CALL METHOD OF books 'Add' = book.
IF sy-subrc <> 0.
* MS Excel konnte nicht per OLE gestartet werden
* Nachrichtenklasse und Fehlercode anpassen, als Platzhalter definiert
MESSAGE ID 'SU' TYPE 'E' NUMBER '000' WITH text-001.
ENDIF.
* Das erste Datenblatt nehmen für die Kopfdaten
* die Anweisung 'No Flush' verhindert die direkte Ausführung des Befehls
* und generiert eine Queue mit allen Befehlen. Diese Queue wird über die
* Funktion 'Flush' ausgeführt.
* sheet = 1 bezeichnet das erste Datenblatt unter Excel
CALL METHOD OF book 'Worksheets' = sheet NO FLUSH
EXPORTING #1 = 1.
* Namen des Datenblattes der Tabelle setzen
SET PROPERTY OF sheet 'Name' = 'Programmübersicht' no flush.
*---------------------------------------------------------------------*
* Überschriften einpflegen *
* diese sollen in der ersten Zeile stehen, beginnend mit der ersten *
* Spalte und dann fortlaufend (fix/fest programmiert) *
* Exporting #1 = Zeile, #2=Spalte, Wertzuweisung über Set Property *
*---------------------------------------------------------------------*
zeile = 1.
MOVE 1 TO sp.
PERFORM upro-excel_w USING sheet cell zeile sp 'Autor'.
PERFORM upro-excel_w USING sheet cell zeile sp 'Erstelldatum'.
PERFORM upro-excel_w USING sheet cell zeile sp 'Name letzter Änderer'.
PERFORM upro-excel_w USING sheet cell zeile sp 'Änderungsdatum'.
PERFORM upro-excel_w USING sheet cell zeile sp 'Programm'.
PERFORM upro-excel_w USING sheet cell zeile sp 'Text'.
*---------------------------------------------------------------------*
* Daten zeilenweise aufbereiten und einpflegen
* Daten werden ab Zeile 2 eingefügt, Spaltenzuordnung entsprechend der*
* Überschrift im Block zuvor
*---------------------------------------------------------------------*
zeile = 1.
LOOP AT itab_abap INTO wa_abap.
ADD 1 TO zeile.
MOVE 1 TO sp.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-cnam.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-cdat.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-unam.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-udat.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-name.
PERFORM upro-excel_w USING sheet cell zeile sp wa_abap-langtext.
ENDLOOP.
* optimale Weite der Spalten, im Beispiel wird dieses die Breite der
* Überschriften sein.
CALL METHOD OF sheet 'Columns' = column NO FLUSH.
FREE OBJECT sheet NO FLUSH.
CALL METHOD OF column 'Autofit' NO FLUSH.
FREE OBJECT column NO FLUSH.
* alle OLE-Objekte plattmachen in der entgegengesetzten Reihenfolge
* wie sie geöffnet wurden, LIFO-Prinzip
FREE OBJECT: book, books, application, excel NO FLUSH.
* starten der Export-Queue über function call
CALL FUNCTION 'FLUSH'.
ENDFORM.
*---------------------------------------------------------------------*
* E X C E L _ W E R T E *
*---------------------------------------------------------------------*
* =>] sheet: *
* =>] cell: *
* =>] zeile: Zeile, in welcher Excel den Wert ablegen soll *
* <=> spalte: Spalte für den Wert, wird im Upro erhöht *
* =>] wert: Zelleninhalt *
*---------------------------------------------------------------------*
FORM upro-excel_w
USING sheet TYPE ole2_object
cell TYPE ole2_object
value(p_zeile)
p_spalte
value(p_wert).
CALL METHOD OF sheet 'Cells' = cell NO FLUSH
EXPORTING #1 = p_zeile
#2 = p_spalte.
SET PROPERTY OF cell 'Value' = p_wert no flush.
FREE OBJECT cell NO FLUSH.
ADD 1 TO p_spalte.
ENDFORM. " upro-excel_werte