Page 1 of 1

Desctop Office Integration / Word / Kopfzeile

PostPosted: Thu Sep 21, 2006 11:05 am
by Bella3219
Hallo,

ich habe ein Worddokument aus dem Business Dokument Service „Inplace“ erzeugt und möchte über OLE/2 Befehle das Dokument formatieren.

Das Einfügen eines Textes, Leerzeile oder von Formatanweisungen war nach einigen Recherchen und Tests kein Problem.

Nun möchte ich eine Kopfzeile offnen, Text ergänzen und die Kopfzeile schließen.

Hier mein Coding:

*** Ermittlung des Allg. Handle für OLE/2 Funktionsaufrufe
word_doc->get_general_handle( ).
**************************************************************
METHOD get_general_handle .

DATA:
l_error LIKE LINE OF errors.

CHECK NOT doc IS INITIAL.
IF handle IS INITIAL.
* Handle des aktiven Dokuments
CALL METHOD doc->get_document_handle
EXPORTING
no_flush = abap_true
IMPORTING
error = l_error
handle = handle.
APPEND l_error TO errors.
l_error->raise_message( 'E' ).
ENDIF.

active_document = handle-obj.
* Handle der Applikation
GET PROPERTY OF active_document 'Application' = application .
CHECK sy-subrc = 0.
* Handle von "Selection"
GET PROPERTY OF application 'Selection' = selection.
CHECK sy-subrc = 0.
*
ENDMETHOD.
**************************************************************
*** Kopfzeile
word_doc->set_header_line( ).

**************************************************************
* VB-Befehl zum Öffnen Kopfzeile / Einfügen Text / Schließen Kopfzeile
*ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
*Selection.TypeText Text:="abc"
*ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
**************************************************************

* Handle der Activ Windows
GET PROPERTY OF application 'ActiveWindow' = active_window.
CHECK sy-subrc = 0.
* Handle der Activ Pane
GET PROPERTY OF active_window 'Activepane' = active_pane.
CHECK sy-subrc = 0.
* Handle der View
GET PROPERTY OF active_pane 'View' = view.
CHECK sy-subrc = 0.
**************************************************************
1. Lösungsansatz:
* Kopffenster öffnen
CALL METHOD OF active_document 'ViewHeader'.

* Text einfügen
CALL METHOD OF selection 'TypeText'
EXPORTING
#1 = 'ABC'.

* Kopffenster wieder schließen
CALL METHOD OF active_document 'CloseViewHeaderFooter'.

2. Lösungsansatz:
* Kopffenster öffnen
CALL METHOD OF view 'ViewHeader'.

* Text einfügen
CALL METHOD OF selection 'TypeText'
EXPORTING
#1 = 'ABC'.

* Kopffenster wieder schließen
CALL METHOD OF view 'CloseViewHeaderFooter'.

3. Lösungsansatz:
* Kopffenster öffnen
SET PROPERTY OF view 'SeekView' = 'CurrentPageHeader'.

* Text einfügen
CALL METHOD OF selection 'TypeText'
EXPORTING
#1 = 'ABC'.

* Kopffenster wieder schließen
SET PROPERTY OF view 'SeekView' = 'CloseViewHeaderFooter'.

**************************************************************
Keiner der drei Lösungsansätze funktioniert. Das entsprechende Handle ist kein Problem, das ist vorhanden. Nur der richtige Befehl oder Befehlsabfolge fehlt.

Wer kann mir hier weiterhelfen?

Gruß Mike

PostPosted: Mon Oct 16, 2006 5:49 pm
by Efe346
Hallo Mike,

sorry, ich kann aus Zeitgründen nur sporadisch hier ins Forum schauen und sehe Deine Anfrage - welche Du im übrigen in 3 verschiedenen Forumsbereichen gepostet hast :( - daher erst jetzt.

Dein Problem kann ich derzeit nicht ausprobieren, vermute aber mal nach Durchsicht Deines Codes folgendes:

Handles sind, wie Du auch sagst, zwar in ausreichender Menge, aber IMHO nicht in aktueller Ausprägung vorhanden. Will heißen: Du aktivierst durch öffnen des Kopffensters einen neuen Arbeitsbereich und versuchst anschließend über die Methode "TypeText" des Objekthandles "selection" einen Text hineinzuschreiben.

Das Objekthandle "selection" bezieht sich jedoch auf den Bereich von Word der zum Zeitpunkt der Instanzierung des Handles aktiv war - dieser ist im übrigen in einer eigenen Methode gekapselt für die ich nirgends einen entsprechenden Aufruf sehen kann (ist dieses Handle vielleicht doch noch initial?).

Da sich das Handle des Selection-Objekts auf einen derzeit nicht aktiven Bereich von Word bezieht (und IMHO aktuell in Deinem Code wirklich Initial sein dürfte, was an sich schon für einen Fehler sorgen sollte!) dürfte Word die aktuell gesendeten Daten nicht verarbeiten, da sich das angewählte Objekt nicht im aktuellen Programmfokus von Word befindet.

Aber wahrscheinlich hast Du Dein Problem mittlerweile eh gelöst, da die Anfrage ja doch schon einige Tage alt ist....

vG

Arno

PS Wenn die Antwort zu verworren war und das Problem noch besteht, kann ich gerne versuchen das ganze etwas näher auszuführen. Ist das Problem bereits gelöst --> Auch eine Selbstbeantwortung von Beiträgen trägt zum Mehrwert des Forums für alle bei ;)

DOI

PostPosted: Tue Jan 30, 2007 3:57 pm
by Bella3219
Hallo Arno,

Ich habe lange Zeit nicht nach meinen Meldungen geschaut, da ich die Hoffnung schon aufgegeben hatte.
Leider habe ich das kleine Problem noch nicht lösen können. Ich hatte mich bei der Programmierung auf eine bestimmte Quelle im Internet gestützt und hier funktioniert die Kopfzeile.

Quelle: SAP Developer Network
"An Easy Reference for OLE Automation"

Mit fehlt auch das nötige Hintergrundwissen im Bereich OLE/2.

Kannst du mir genauer beschreiben, was ich falsch mache?

Gruß Mike