ALV-OO und Excel Inplace

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
47 Beiträge • Vorherige Seite 2 von 4 (current) Nächste
47 Beiträge Vorherige Seite 2 von 4 (current) Nächste

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo Stefan,

ich benutze den cl_gui_alv_grid.

Was das Coding angeht, so wäre mir Unterstützung bei den von Dir genannten Punkten 3 und 4 ganz hilfreich, gern auch auf meine eMail-Adresse. Bin in den nächsten 3 Wochen nicht im Büro, hat also etwas Zeit. Trotzdem vielen Dank erst mal.

Gruß
Kerstin

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ALV-OO und Excel Inplace

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo Kerstin,

erstmal schönen Urlaub.
Wenn du denn zurück bist kannst du dann ja hier fortsetzen.

ad 3) Welchen Punkt brauchst du erklärt? Schön wäre es wenn du einfach ein Demoprogramm bereitstellst ( am Besten auf SFLIGHT - dann kann das jeder nachvollziehen ) und dann irgendwo zum Download bereitstellst ( am Besten hier als SAPLINK Nugget oder Slinkee ) wo die anderen Punkte schon alle eingebaut sind. Dann kann das Forum auf einem festen Punkt aufsetzen und muss keine eigenen Beispiele basteln.

ad 4) OLE2 möchte hier nicht erklären. Da gibt es sicher ne Menge Tutorials im Netz - auch was das OLE2-Handling im SAP angeht. Im Tricktresor findest du z.B. mehrere.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo ,

ich verwende den alv grid control. Beim Punkt 3 der Vorgehensweise weiß ich nicht weiter (parent holen, childlist lesen usw.)

Gruß
Kerstin

Re: ALV-OO und Excel Inplace

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Mit dem Parent ist der Container gemeint in dem das Control (das ALV) eingebettet wurde.
(Attribut PARENT der Klasse CL_GUI_CONTROL von der CL_GUI_ALV_GRID abgeleitet ist)
Dahinter verbirgt sich ein Container der "Kinder" (= Controls) enthalten kann.
(Attribut CHILDREN der Klass CL_GUI_CONTAINER)
Diese Kinder-Controls kannst du mithilfe von ?= in andere (kompatible) Objekttypen casten.

Am Besten du schaust dir mal den Inhalt von PARENT->CHILDREN im Debugger an, dann glaub ich kommst du schon weiter.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo,

ich habe folgende Vereinbarungen:

Code: Alles auswählen.

data: g_container type scrfname value 'TN_CUSTOM_CONTROL'. " Dynpro 9000
data:  alv_grid_tn  type ref to cl_gui_alv_grid,
       g_custom_container type ref to cl_gui_custom_container.
und diese Initialisierungen:

Code: Alles auswählen.

if g_custom_container is initial.
    create object g_custom_container
      exporting
        container_name = g_container.
    create object alv_grid_tn
      exporting
        i_parent = g_custom_container.
           ...
Hier folgt dann die weitere Verarbeitung:

Code: Alles auswählen.

   call method alv_grid_tn->set_table_for_first_display
usw.

Die Klasse CL_GUI_CONTROL ist gar nicht im Spiel.

Wo finde ich hier die Informatiomnen, die ich suche?

Gruß
Kerstin

Re: ALV-OO und Excel Inplace

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Attribut alv_grid_tn->parent
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
da steht das drin:

{O:32*\CLASS=CL_GUI_CUSTOM_CONTAINER}

Re: ALV-OO und Excel Inplace

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Nichts für ungut, aber hast du den (neuen) Debugger schon mal verwendet?
Da kann man einen Doppelklick drauf mach und kommt dann zur Objekt-Übersicht.
Dort kannst du dir dann den aktuellen Zustand der jeweiligen Objektinstanz anschauen usw.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Ganz so schlimm ist es nicht...
ich bin mit Doppelklicken schon zum Objekt Parent und jetzt auch zu Children vorgedrungen, kann aber mit dem, was ich da sehe, nicht viel anfangen.
Wie müsste denn das Coding aussehen, um die Info zu lesen?

Gruß
Kerstin

Re: ALV-OO und Excel Inplace

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Im Coding kannst du mit dem -> Operator auf die einzelnen Komponenten einer Objekt-(oder auch Daten-)Referenz zugreifen.
Children ist dabei eine Tabelle.

Code: Alles auswählen.

loop at alv_grid_tn->parent->children assigning <lr_control>.
<lr_control> ist vom Typ CL_GUI_CONTROL.
Innerhalb der Schleife muss du dann, so wie ich das aus der Beschreibung herausgelesen habe, die Objekte auf DOI (?) casten. Dazu gibt es den Operator ?=.

Code: Alles auswählen.

try.
    lr_doi ?= <lr_control>.
* Code zum Bearbeiten
  catch cx_root.
endtry.
Wenn die Zuweisung an lr_doi nicht funktioniert, weil das Objekt nicht kompatibel ist, wird eine Exception ausgelöst und dann mit Catch abgefangen. Wenn es jedoch gut geht, hast du das gesuchte Objekt gefunden und dann wird der nachfolgende Code ausgeführt. Weil ich den hier gesuchten Typ nicht kenne, hab ich auch vorgeschlagen, dass du dir im Debugger ein Bild von dem Inhalt machst:
{O:<Instanznummer>*\CLASS=<gesuchter Klassentyp>}

Den Rest, wie man von da an mit OLE usw. arbeitet musst du woanders nachlesen oder erfragen

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo,
vielen Dank erst mal. Ich werde mein Glück versuchen.. notfalls muß ich mich noch einmal melden.

Gruß
Kerstin

Re: ALV-OO und Excel Inplace

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo Kerstin,

ich hänge dir mal ein Beispielprogramm hier an, mit dem du den OLE2-Handle auf ein EXCEL-Inplace Object bekommst.
Bitte den angesprochenen Screen 9000 selber anlegen und einen CustomContainer drauf platzieren.
Den für dich interessanten Code ( FORM GET_DOI ) habe ich auch ein wenig kommentiert.
Hinweis: Es nützt nichts im Eventhandler direkt zu versuchen den OLE2-Handle zu ergattern. Das funktioniert (warum auch immer) erst wenn du den PAI angetriggert und dich aus dem ALV-Event heraus bewegt hast.
Hinweis2: Der ALV-Code für EXCEL-Inplace wird falsch dargestellt im folgenden Codeblock. Richtig heißt die Zeile WHEN '&VEXCEL'.

Code: Alles auswählen.

REPORT.


DATA: go_grid  TYPE REF TO cl_gui_alv_grid,
      go_cc    TYPE REF TO cl_gui_custom_container,
      gt_data  TYPE STANDARD TABLE OF sflight WITH NON-UNIQUE DEFAULT KEY,
      gv_repid TYPE syrepid,
      gv_dynnr TYPE sydynnr,


      ok_code TYPE syucomm.

*----------------------------------------------------------------------*
*       CLASS lcl_eventreceiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_eventreceiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: handle_ucomm FOR EVENT after_user_command OF cl_gui_alv_grid
                                IMPORTING e_ucomm.
ENDCLASS.                    "lcl_eventreceiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_eventreceiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_eventreceiver IMPLEMENTATION.
  METHOD handle_ucomm.
    CASE e_ucomm.
      WHEN '&VEXCEL'.
        cl_gui_cfw=>set_new_ok_code( 'Excel_angetriggert' ).
      WHEN OTHERS.
    ENDCASE.
  ENDMETHOD.                    "handle_ucomm
ENDCLASS.                    "lcl_eventreceiver IMPLEMENTATION

START-OF-SELECTION.
  SELECT * UP TO 10 ROWS INTO TABLE gt_data FROM sflight.

END-OF-SELECTION.

  gv_repid = sy-repid.
  gv_dynnr = '9000'.
  CREATE OBJECT go_cc
    EXPORTING
      container_name = 'CC_9000'
      repid          = gv_repid
      dynnr          = gv_dynnr
    EXCEPTIONS
      OTHERS         = 6.

  CREATE OBJECT go_grid
    EXPORTING
      i_parent      = go_cc
      i_appl_events = ' '
    EXCEPTIONS
      OTHERS        = 5.


  SET HANDLER lcl_eventreceiver=>handle_ucomm FOR go_grid.
  go_grid->set_table_for_first_display( EXPORTING
                                          i_structure_name              = 'SFLIGHT'
                                        CHANGING
                                          it_outtab                     = gt_data
                                        EXCEPTIONS
                                          invalid_parameter_combination = 1
                                          program_error                 = 2
                                          too_many_lines                = 3
                                          OTHERS                        = 4 ).


  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.

  SET PF-STATUS '9000'.
*  SET TITLEBAR 'xxx'.
  CLEAR ok_code.

ENDMODULE.                 " STATUS_9000  OUTPUT


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  CASE ok_code.
    WHEN 'ABBR'. SET SCREEN 0.
    WHEN 'BACK'. SET SCREEN 0.
    WHEN 'EXIT'. LEAVE TO SCREEN 0.
    WHEN 'Excel_angetriggert'.
      PERFORM get_doi.

    WHEN OTHERS.
      BREAK-POINT.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9000  INPUT


*&---------------------------------------------------------------------*
*&      Form  GET_DOI
*&---------------------------------------------------------------------*
FORM get_doi .

  FIELD-SYMBOLS: <child>    LIKE LINE OF go_grid->parent->children.

  DATA: lr_proxy            TYPE REF TO c_oi_container_control_proxy,
        ls_document_handle  TYPE  cntl_handle,

        ole2_something      TYPE ole2_object,
        ole2_sheet          TYPE ole2_object,

        lv_document_cookie  TYPE i,
        lv_document_type    TYPE text80,
        lv_name             TYPE text80.

* Childliste des Containers abklappern und das raussuchen, was nicht der Grid selber ist
  LOOP AT go_grid->parent->children ASSIGNING <child> WHERE table_line <> go_grid.
    EXIT.
  ENDLOOP.
  CHECK sy-subrc = 0.


* Was wir hier haben ist ein DOI-Proxy-Container
  lr_proxy ?= <child>.
* Irgendwie brauchen wir den DocumentCookie - bei mir ist das immer 1 - aber das hier sollte auch klappen
  DO 10 TIMES.
    lv_document_cookie = sy-index.
    lr_proxy->get_document_type( EXPORTING document_cookie = lv_document_cookie
                                 IMPORTING document_type   = lv_document_type ).
    IF lv_document_type CS 'EXCEL'.
      EXIT.
    ENDIF.
  ENDDO.
* Sicher gehen, dass wir auch wirklich einen Handle auf ein EXCEL-Dokument haben
  CHECK lv_document_type CS 'EXCEL'.
* OLE-2 handle auf das EXCEL holen.
* Keine Ahnung ob das jetzt EXCEL.Application oder EXCEL.Workbook oder sonst was ist
* Aber auf jeden Fall hat es ein Attribut ActiveSheet.  Damit erhält man das sichtbare Tabellenblatt
  lr_proxy->get_document_handle(  EXPORTING document_cookie = lv_document_cookie
                                  IMPORTING document_handle = ls_document_handle  ).

  ole2_something = ls_document_handle-obj.

  GET PROPERTY OF ole2_something 'ActiveSheet' = ole2_sheet." no flush.     " Kein No flush da SAP wegen lokaler Var. meckert

* Um zu erkennen, dass es funktioniert den Namen des Tabreiters des aktiven Blattes auslesen
  GET PROPERTY OF ole2_sheet     'Name'        = lv_name."    no flush.     " Kein No flush da SAP wegen lokaler Var. meckert
  cl_gui_cfw=>flush( ).


  MESSAGE lv_name TYPE 'I'.

ENDFORM.                    " GET_DOI
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo Stefan,
erst mal vielen Dank.

Gruß
Kerstin

Re: ALV-OO und Excel Inplace

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
a-dead-trousers hat geschrieben:... die Objekte auf DOI (?) casten.
DOI = Document Office Interface
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV-OO und Excel Inplace

Beitrag von Kerstin (Specialist / 203 / 2 / 0 ) »
Hallo Stefan,

wenn ich Dein Coding richtig interpretiere, modifizierst Du einen bestimmten Bereich ausgehend von Deiner internen Tabelle t_daten. Ich habe eine Excel-datei, die mit einem bestimmten Layout ausgegeben wird. Dieses enthält Zwischensummen, welche in einer Spalte verändert werden sollen. Ist so etwas auch möglich?

Gruß
Kerstin

Vergleichbare Themen

5
Antw.
3603
Views
Excel Inplace
von Mr. ABAP » 14.03.2006 11:19 • Verfasst in ABAP Objects®
1
Antw.
2320
Views
Excel Inplace SAP R3
von Gast » 14.06.2005 11:23 • Verfasst in ABAP® Core
3
Antw.
4053
Views
Excel Inplace (Tricktresor)
von Betze » 15.06.2007 10:18 • Verfasst in ABAP Objects®
4
Antw.
3745
Views
Begrenzung bei EXCEL-Inplace
von littleJohn » 06.06.2007 12:01 • Verfasst in ABAP® Core
4
Antw.
4684
Views
i_oi_spreadsheet und Excel InPlace
von christop » 25.04.2005 14:53 • Verfasst in ABAP Objects®

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von tar 8 / 177
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von tar 8 / 177
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822