Werte per Excel eingeben

Das hier vorgestellte Programm startet Excel und übergibt Werte. Diese Werte können in Excel bearbeitet werden. Danach werden die Daten ausgelesen und Excel wird über eine Funktion im R/3 beendet.

Mit dem folgenden Programm ist es möglich, Excel zu starten, Daten zu übergeben und zu ändern.

Das Arbeitsblatt wird geschützt, so dass nur die zu ändernden Daten geändert werden können.

Diese Daten werden dann durch das Programm wieder eingelesen und Excel wird beendet.

Quelltext

REPORT ZZ_EXCEL_DEMO.

*******************************************************************
***                                                             ***
***                  
https://tricktresor.com                  ***
***                                                             ***
*******************************************************************

*** OLE-Definitionen
INCLUDE OLE2INCL.

*** Variablen
DATA: O_EXCEL         TYPE OLE2_OBJECT,         ” Excel.Application
      O_MAPL          TYPE OLE2_OBJECT,         ” list of workbooks
      O_WORKBOOK      TYPE OLE2_OBJECT,         ” Workbook
      O_MAP           TYPE OLE2_OBJECT,         ” Mappe

      O_ACTIVE_WINDOW TYPE OLE2_OBJECT,         ” Active Window
      O_ACTIVE_SHEET  TYPE OLE2_OBJECT,         ” Active Sheet
      O_CELL          TYPE OLE2_OBJECT,         ” Cell
      V_ZAHL          TYPE P DECIMALS 2,        ” Number
      V_VALUE(30)     TYPE C.                   ” Cell Value

START-OF-SELECTION.

*** Objekt “Excel” erzeugen
  CREATE OBJECT O_EXCEL ‘EXCEL.APPLICATION’.
  IF sy-subrc NE 0.
    WRITE: / ‘Fehler Excel Create!’.
    STOP.
  ELSE.

*** Information
    WRITE: / ‘|————————|’.
    WRITE: / ‘| FERTIG: Werte einlesen |’ HOTSPOT ON.
    WRITE: / ‘|————————|’.

*** Sichtbarkeit setzen
    SET PROPERTY OF O_EXCEL   ‘Visible’   = 1.

*** Excel-Objekt “Arbeitsblatt” erzeugen
    CALL METHOD OF O_EXCEL    ‘Workbooks’ = O_WORKBOOK.

*** Excel-Objekt “Mappe” erzeugen
    CALL METHOD OF O_WORKBOOK ‘Add’       = O_MAP.
  ENDIF.

*** Werte einfügen
  PERFORM FILL_CELL
    USING: 1 1 1 ‘Bitte Werte eingeben.’ &
                 ‘Zum Beenden “FERTIG” im SAPGUI anklicken!’,
           2 1 1 ‘Länge:’,
           3 1 1 ‘Breite:’,
           4 1 1 ‘Höhe:’,
           2 2 0 ’10’,
           3 2 0 ’20’,
           4 2 0 ’30’.

*** Aktives Arbeitsblatt ermitteln
  CALL METHOD OF O_EXCEL ‘ActiveSheet’ = O_ACTIVE_SHEET.

*** Blattschutz setzen
  CALL METHOD OF O_ACTIVE_SHEET ‘Protect’
     EXPORTING #1 = SPACE
               #2 = 1           “Drawing Objects
               #3 = 1           “Contents
               #4 = 1.          “Scenarios

AT LINE-SELECTION.

*** Listindex zurücksetzen, damit nach Anzeige der Werte nicht
*** wieder der FERTIG-Button angezeigt wird.
  SY-LSIND = 0.

*** Wert “Länge” auslesen
  PERFORM GET_CELLVALUE USING 2 2 V_VALUE.
  WRITE: / ‘Länge: ‘, V_VALUE.

*** Wert “Breite” auslesen
  PERFORM GET_CELLVALUE USING 3 2 V_VALUE.
  WRITE: / ‘Breite:’, V_VALUE.

*** Wert “Höhe” auslesen
  PERFORM GET_CELLVALUE USING 4 2 V_VALUE.
  WRITE: / ‘Höhe:  ‘, V_VALUE.


* Excel beenden
*———————————————————————–
* see
http://support.microsoft.com/default.aspx?scid=kb;de;503541
* Close without saving

* get active window
  CALL METHOD OF O_EXCEL ‘ACTIVEWINDOW’ = O_ACTIVE_WINDOW.

* close active_window without saving
  CALL METHOD OF O_ACTIVE_WINDOW ‘CLOSE’
       EXPORTING #1 = 0.

* close Excel
  CALL METHOD OF O_EXCEL ‘QUIT’.

* Free Objects
  FREE OBJECT O_WORKBOOK.
  FREE OBJECT O_EXCEL.
  FREE OBJECT O_MAPL.
  FREE OBJECT O_MAP.
  FREE OBJECT O_ACTIVE_WINDOW.

*———————————————————————*
*       FORM FILL_CELL                                                *
*———————————————————————*

FORM FILL_CELL USING I J LOCK VAL.

*** Zelle ansprechen
  CALL METHOD OF O_EXCEL ‘Cells’     = O_CELL
       EXPORTING
          #1 = I                                            “Zeile
          #2 = J.                                           “Spalte

*** Zellwert setzen
  SET PROPERTY OF O_CELL ‘Value’     = VAL.
  SET PROPERTY OF O_CELL ‘Locked’    = LOCK.

ENDFORM.

*———————————————————————*
*       FORM GET_CELLVALUE                                            *
*———————————————————————*

FORM GET_CELLVALUE USING I J VAL.

* Zelle, aus der Ergebnis gelesen wird
  CALL METHOD OF O_EXCEL ‘Cells’ = O_CELL
       EXPORTING
          #1 = I                                            “Zeile
          #2 = J.                                           “Spalte

* Zellinhalt lesen
  GET PROPERTY OF O_CELL ‘Value’ = V_VALUE.

  IF V_VALUE CO ‘0123456789. ‘.
    V_ZAHL = V_VALUE.
    VAL = V_ZAHL.
  ELSE.
    VAL = V_VALUE.
  ENDIF.

* Objekt freigeben
  FREE OBJECT O_CELL.

ENDFORM.

Enno Wulff