Excel Datei aus R/3 erzeugen

Mit diesem Programm ist es möglich, eine Excel-Datei zu erzeugen. Excel wird dabei ‘unsichtbar’ gestartet. Der Anwender bekommt davon also nichts mit, sofern er nicht gerade die Windows-Prozessliste studiert…

Das folgende Programm erzeugt eine Exceldatei und speichert sie ab. Excel wird dabei nicht sichtbar gestartet! Der Anwender bekommt von dem Vorgang also nichts mit.

Das Programm hat so gut wie keine Fehlerbehandlung! Einzig wird abgefragt, ob das Objekt “Excel” erzeugt werden konnte.

Als Standard-Demoprogramm existiert RSDEMO01. Hier wird Excel sichtbar gestartet und mit Flugdaten gefüllt. Die Datei wird nicht gespeichert.

REPORT.
TYPE-POOLS ole2.

DATA: excel         TYPE ole2_object,
      mapl          TYPE ole2_object,         " list of workbooks
      workbook      TYPE ole2_object,         " Workbook
      map           TYPE ole2_object.         " Mappe


CREATE OBJECT excel 'EXCEL.APPLICATION'.
IF sy-subrc NE 0.
  WRITE : / 'Fehler CREATE OBJECT'.
ELSE.
  SET PROPERTY OF excel   'Visible'   = 0.  "nicht sichtbar
  CALL METHOD OF excel    'Workbooks' = workbook.
  CALL METHOD OF workbook 'Add'       = map.

  PERFORM fill_cell USING 1 1 1 3 'TRICKTRESOR'.
  PERFORM fill_cell USING 2 1 1 1 'https://tricktresor.com'.
  PERFORM fill_cell USING 5 1 1 3 'Datum'.
  PERFORM fill_cell USING 5 2 0 5 sy-datum.

  PERFORM fill_cell USING 6 1 1 3 'Uhrzeit'.
  PERFORM fill_cell USING 6 2 0 5 sy-uzeit.

  CALL METHOD OF map 'SaveAs' EXPORTING #1 = 'd:\temp\test1.xls'.
  CALL METHOD OF workbook 'CLOSE'.
  CALL METHOD OF excel 'QUIT'.
  FREE OBJECT workbook.
  FREE OBJECT excel.

ENDIF.


*---------------------------------------------------------------------*
*       FORM FILL_CELL                                                *
*---------------------------------------------------------------------*
*  –>  I      Zeile                                                   *
*  –>  J      Spalte                                                  *
*  –>  BOLD   Fett=1, Normal=0                                        *
*  –>  COL    Farbe:                                                  *
*              1=Schwarz, 2=weiss, 3=rot, 4=grün, 5=blau, 6=gelb      *
*  –>  VAL    Wert                                                    *
*---------------------------------------------------------------------*
FORM fill_cell USING i j bold col val.

  DATA:
      h_zl TYPE ole2_object,           " cell
      h_f TYPE ole2_object.            " font

  CALL METHOD OF excel 'Cells'     = h_zl
       EXPORTING #1 = i #2 = j.
  SET PROPERTY OF h_zl 'Value'     = val .
  GET PROPERTY OF h_zl 'Font'      = h_f.
  SET PROPERTY OF h_f 'Bold'       = bold .
  SET PROPERTY OF h_f 'ColorIndex' = col. "Rot
  SET PROPERTY OF h_f 'Size'       = 16.

ENDFORM.

Verfügbar auf Github: https://github.com/tricktresor/demo mit abapGit.

 

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)

COMMENTS

  • <cite class="fn">chris009</cite>

    Hallo

    vielen Dank für das tolle Beispiel. Ich konnte es sehr gut verwenden.

    Ich habe ein Programm geschrieben, welches in einem Loop 150 Excel-Files schreibt. Mir ist aufgefallen, dass wenn ich untenstehenden Code 100x aufrufe, in der Win-Taskliste am Schluss Excel 150x aufgeführt ist. Diese verschwinden erst, wenn der Modus beendet wird.

    Wenn ich den Loop zwischen “CREATE OBJECT Excel” und “FREE OBJECT excel” setze, habe ich nur einen Task, aber der benötigt dann gegen 1 GB Memory.

    Grundsätzlich funktioniert ja alles, aber mich würde interessieren, welches eine saubere 🙂 Lösung ist, da die eigentlichen Files recht schlank sind. Kann mir jemand helfen?

    Vielen Dank
    Chris

    CREATE OBJECT excel ‘EXCEL.APPLICATION’.

    SET PROPERTY OF excel ‘Visible’ = 0. “nicht sichtbar
    CALL METHOD OF excel ‘Workbooks’ = workbook.
    CALL METHOD OF workbook ‘Add’ = map.
    ….
    CALL METHOD OF map ‘SaveAs’ EXPORTING #1 = ‘c:/temp/test1.xls’.
    CALL METHOD OF workbook ‘CLOSE’.
    CALL METHOD OF excel ‘QUIT’.
    FREE OBJECT workbook.
    FREE OBJECT excel.

Leave a Comment