[ABAP] ExcelOle – Zelle lesen / schreiben

DATA: o_excel TYPE ole2_object.
DATA: o_cell TYPE ole2_object.
DATA: cell_value TYPE string.

...

* Zelle ermitteln
CALL METHOD OF o_excel 'Cells' = o_cell
   EXPORTING
	 #1 = 1   " Zeile
	 #2 = 1.  " Spalte

* Wert schreiben
SET PROPERTY OF o_cell 'Value' = 'Text 1_1'.

* Zellwert holen
GET PROPERTY OF o_cell 'Value' = cell_value.

* Zellwert ausgeben
WRITE: / cell_value.

* Objekt wieder freigeben
FREE OBJECT: o_cell.

[ABAP] ExcelOle – Excel-Datei erstellen und speichern

DATA: o_excel TYPE ole2_object.
DATA: o_workbook TYPE ole2_object.
DATA: o_sheet TYPE ole2_object.
  
START-OF-SELECTION.
  TRY.
* Excel starten
      CREATE OBJECT o_excel 'Excel.Application'.

      IF sy-subrc NE 0.
        WRITE : / 'Fehler.'.
      ELSE.
* Excel sichtbar
        SET PROPERTY OF o_excel 'Visible' = 1.
* Anzahl Sheets setzen
        SET PROPERTY OF o_excel 'SheetsInNewWorkbook' = 1.

* Workbook holen
        CALL METHOD OF o_excel 'WorkBooks' = o_workbook.
* neues Workbook mit einer Sheet hinzufügen
        CALL METHOD OF o_workbook 'Add'.

* 1. Sheet holen
        CALL METHOD OF o_excel 'Worksheets' = o_sheet
          EXPORTING #1 = 1.
* Sheet aktivieren
        CALL METHOD OF o_sheet 'Activate'.
* Sheet benennen
        SET PROPERTY OF o_sheet 'Name' = 'Tabelle mit Testwerten'.

        ...

* MessageDialog für Überschreiben einer bestehenden Datei unterdrücken
        SET PROPERTY OF o_excel 'DisplayAlerts' = 0.

* Datei speichern unter ...
        CALL METHOD OF o_sheet 'SaveAs'
          EXPORTING
            #1 = p_fname.
*            #2 = 1. " Fileformat

* Alle Messages in Excel wieder zulassen
        SET PROPERTY OF o_excel 'DisplayAlerts' = -1.

* Workbook schließen
        CALL METHOD OF o_workbook 'Close'.
* Excel schließen
        CALL METHOD OF o_excel 'Quit'.

* Objekte freigeben
        FREE OBJECT:  o_sheet,
                      o_workbook,
                      o_excel.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

[ABAP] ExcelOle – Excel-Datei öffnen

DATA: o_excel TYPE ole2_object.
DATA: o_workbook TYPE ole2_object.
  
START-OF-SELECTION.
* Excel starten
  CREATE OBJECT o_excel 'Excel.Application'.

  IF sy-subrc NE 0.
    WRITE : / 'Fehler.'.
  ELSE.
* Excel sichtbar
    SET PROPERTY OF o_excel 'Visible' = 1.
* Workbook holen
    CALL METHOD OF o_excel 'Workbooks' = o_workbook.
* Excel-Datei öffnen
    CALL METHOD OF o_workbook 'Open'
      EXPORTING
        #1 = 'c:\test.xlsx'.

    ...

* Workbook schließen
    CALL METHOD OF o_workbook 'Close'.

* Excel schließen
    CALL METHOD OF o_excel 'Quit'.
    
* Objekte freigeben
    FREE OBJECT: o_workbook.
    FREE OBJECT: o_excel.
  ENDIF.

[ABAP] Zufallszahlen erzeugen

Variante 1 (cl_abap_random)

* int - Zufallszahlen von 0...100 erzeugen
DATA(o_rand_i) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( ) min = 0 max = 100 ).
DO 10 TIMES.
  WRITE: / o_rand_i->get_next( ).
ENDDO.

DATA(o_rand) = cl_abap_random=>create( cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / o_rand->intinrange( low = 0 high = 100 ).
ENDDO.

* float - Zufallszahlen im Bereich von 0...1 erzeugen
DATA(o_rand_f) = cl_abap_random_float=>create( seed = cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / |{ o_rand_f->get_next( ) NUMBER = ENVIRONMENT }|.
ENDDO.

DATA(o_rand) = cl_abap_random=>create( cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / |{ o_rand->float( ) NUMBER = ENVIRONMENT }|.
*  WRITE: / |{ o_rand->decfloat16( ) NUMBER = ENVIRONMENT }|.
*  WRITE: / |{ o_rand->decfloat34( ) NUMBER = ENVIRONMENT }|.
ENDDO.

Variante 2 (cl_random_number)

DATA(o_rnd) = NEW cl_random_number( ).
o_rnd->if_random_number~init( ).

DO 10 TIMES.
* Integer-Zahlen von 0 ... 100
  DATA(lv_i) = o_rnd->if_random_number~get_random_int( 100 ).
  WRITE: / lv_i.
ENDDO.

DO 10 TIMES.
* Float-Zahlen von 0 ... 1
  DATA(lv_f) = o_rnd->if_random_number~get_random_float( ).
  WRITE: / |{ lv_f NUMBER = ENVIRONMENT }|.
ENDDO.

[ABAP] Zwischenablage (Clipboard) verwenden

DATA: itab TYPE STANDARD TABLE OF sflight.
DATA: i_rc TYPE i.

...

* Export-Tabellen dürfen nicht generischen Typs und keine String-Tables sein
cl_gui_frontend_services=>clipboard_export( EXPORTING
                                              no_auth_check        = abap_true
                                            IMPORTING
                                              data                 = itab
                                            CHANGING
                                              rc                   = lv_rc
                                            EXCEPTIONS
                                              cntl_error           = 1
                                              error_no_gui         = 2
                                              not_supported_by_gui = 3
                                              OTHERS               = 4 ).

IF sy-subrc = 0.
  ...
ENDIF.

[ABAP] Popup-Dialog anzeigen

DATA: ret TYPE string.

* Ersetzt alle anderen obsoleten 'POPUP_TO_...' Funktionsbausteine
* kann für Ja, Nein, Abbrechen, Zurück, Weiter, Infos usw. genutzt werden
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    titlebar              = 'Frage'
    text_question         = 'Alles klar?'
    display_cancel_button = abap_true
  IMPORTING
    answer                = ret.

CASE ret.
  WHEN '1'.
* Ja
  WHEN '2'.
* Nein
  WHEN 'A'.
* Abbruch
ENDCASE.

Weiterführender Link: Link