Anspringen von Textmarken in Word (OLE)

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

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

Anspringen von Textmarken in Word (OLE)

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Experten,

ich fülle ein Dokument in MS Word mittels OLE direkt aus einem Z*-ABAP heraus.
Kann mir jemand sagen, wie ich Textmarken in diesem Dokument anspringen und füllen kann.

Im voraus besten Dank.

Gruß
Mathis Conny

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


Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Mathis,

kannst du noch sagen, um was für Textmarken es sich dabei handelt? Meinst Du Felder, die im Word-Dokument eingefügt sind?

Gruss,
Jesn

Textmarken

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Jens,

ich lege über Einfügen Textmarken die Textmarken an. Diese möchte ich dann gerne von SAP aus anspringen.
Mir würde allerdings auch schon reichen, wenn ich Felder, die ich im Word anlege anspringen könnte.
Hast du vielleicht eine Idee?

Gruß

Conny
Jens hat geschrieben:Hallo Mathis,

kannst du noch sagen, um was für Textmarken es sich dabei handelt? Meinst Du Felder, die im Word-Dokument eingefügt sind?

Gruss,
Jesn

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Conny,

bin noch am Probieren, aber ein bißchen weiter. Im Word springt man eine Textmarke wie folgt an:

Code: Alles auswählen.

ActiveDocument.Bookmarks("test").Select
oder

Code: Alles auswählen.

ThisDocument.Bookmarks("test").Select
Mit OLE muß man genau diese Methoden aufrufen.

Müßte in etwas so funktionieren:

Code: Alles auswählen.

NCLUDE ole2incl .

DATA: o_word TYPE ole2_object ,
o_documents TYPE ole2_object ,
o_doc TYPE ole2_object ,
o_activedoc TYPE ole2_object,
o_bookmarks type ole2_object,
o_bookmark type ole2_object.

CREATE OBJECT o_word 'WORD.APPLICATION'.
SET PROPERTY OF o_word 'Visible' = '0' .

CALL METHOD OF o_word 'Documents' = o_documents.

CALL METHOD OF o_documents 'Open' = o_doc
EXPORTING #1 = 'D:\test.doc' .

CALL METHOD OF o_word 'ActiveDocument' = o_activedoc .

CALL METHOD of o_activedoc 'Bookmarks' = o_bookmarks.

CALL METHOD of o_bookmarks 'Select' = o_bookmark
EXPORTING #1 = 'test'.
Hab's selbst noch nicht getestet, aber so (oder so ähnlich) müßte es funktionieren.

Gruss,
Jens

Mein Coding

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Jens,

vielen Dank für deine Antwort, leider führt auch das noch nicht zu meinem gewollten Erfolg.
Hier mein Coding:

data: rueck type ole2_object,

create object word 'Word.Basic'.
call method of word 'AppShow'.
call method of word 'FileNew' = rueck
exporting #1 = 'c:\test'.

tmarke = 'EMAIL'.(FAX; TEL; usw.)
call method of word 'EditFind'
exporting #1 = tmarke.

p_string = adr6-smtp_addr.
call method of word 'Insert'
exporting #1 = p_string.

Textmarke EMAIL habe ich im Word unter Textmarken anlegen angelegt.

Ich möchte viele Textmarken füllen, habe das Abarbeiten der Textmarken in einem Loop hinterlegt.
Es funktioniert der einmalige Absprung zur ersten TExtmarke und auch der Insert des Textes an dieser STelle funktioniert, allerdings nur bei der ersten Textmarke, ab da schreibt er alles untereinander.
Siehe Beispiel Ausdruck


Tel./Fax/E-Mail
+49 7731 80-TEL / 80-FAX /
6361

Coiver Contract Srl

Cormano (MI)
Via Bizzozzero, 93
2089
MATHIS

Die 6361 z.B müsste er an die Textmarke FAX schreiben.
Dein Coding hab ich zwar eingebaut komm jedoch auch zu keinem anderen Ergebnis.
Vielleicht hast noch eine Idee, wenn du mein Coding siehst, bzw. erkennst vielleicht meinen Fehler, den
ich evtl. mache.
Vielen Dank.

Gruß
Conny

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Conny,

werde mal Dein Coding testen. Melde mich dann wieder.

Gruss,
Jens

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Conny,

das hat bei mir auch nicht funktioniert, allerdings noch nicht einmal das Anspringen der Textmarke.
Das habe ich jetzt hinbekommen mit:

Code: Alles auswählen.

CALL METHOD OF o_activedoc 'Bookmarks' = o_bookmark EXPORTING #1 = 'TEL'.

CALL METHOD of o_bookmark 'Select' = o_bookmark.
Damit springt er dann die Textmarke 'TEL' an. Allerdings ist mir ehrlich gesagt unklar, wie man das ersetzt. Das habe ich in Word nicht hinbekommen.
Man kann zwar normalen Text Suchen und Ersetzen, dann wird aber jegliches vorkommen im Text von 'TEL' oder 'FAX' o.ä. ersetzt (was möglicherweise nicht unbedingt erwünscht ist). Jedenfalls braucht man dazu keine Textmarken (die bringen in diesem Falle nichts). Ist es nicht sinnvoller, das anderweitig zu lösen? Vielleicht über Felder?

Gruss,
Jens

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Jens,

soll ich dir mal was sagen, ich verstehe jetzt bald gar nichts mehr. Den Befehl, den du mir genannt hast geht bei mir nicht. Kann es denn daran liegen, daß ich WORD.BASIC verwende? Habe es allerdings auch schon mit anderen probiert funktioniert alles nicht.
Ich wäre ja auch schon zufrieden, wenn ich Texte ersetzen könnte. Nicht einmal das bekomm ich hin.
Frage: Könnte es denn auch sein, daß bei mir mit den Rückgabewerten was nicht stimmt. Ich kann bei mir auch nicht alle calls einbauen, da bei mir dann nicht einmal mehr das Word aufgerufen wird.
Das Coding, das ich dir geschickt habe beinhaltet meine Calls auf die geweiligen Methoden.
Ich mach einfach etwas grundlegendes falsch, ich weiß nur nicht was.
Wie wäre denn das Coding für das Anspringen von Texten und Ersetzen von Texten?

Vielen Dank im voraus.
Gruß
Conny

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Conny,

hat ein bißchen gedauert, aber bei mir funktioniert es jetzt (Suchen und Ersetzen):

Code: Alles auswählen.

CREATE OBJECT h_word 'WORD.APPLICATION'.
SET PROPERTY OF h_word 'Visible' = '1' .

CALL METHOD OF h_word 'Documents' = docs.

CALL METHOD OF docs 'Open' = doc
EXPORTING #1 = 'c:\temp\test23.doc' .

CALL METHOD OF h_word 'ActiveDocument' = o_activedoc.
CALL METHOD of o_activedoc 'Activate'.

call method of o_activedoc 'Content' = o_content.
call method of o_content 'Find' = o_find.

 CALL METHOD OF o_find 'Execute'
       EXPORTING #01 = 'TEL'
                 #02 = 1
                 #03 = 1
                 #04 = 0
                 #05 = 0
                 #06 = 0
                 #07 = 0
                 #08 = 0
                 #09 = 0
                 #10 = 'Hallo'.
Im obigen Fall sucht er nach 'TEL' im Dokument und ersetzt es dann durch 'Hallo'.
Mit 'WORD.BASIC' funktioniert es allerdings bei mir nicht, sondern nur mit 'WORD.APPLICATION'.

Gruss,
Jens

Vielen Dank

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Jens,
vielen Dank für deine Mithilfe, leider funktionieren deine Methoden bei mir unter Word.Basic so nicht.
Es muß hier Unterschiede geben. Ich gebe es jetzt auf. Traurig, aber von SAP habe ich bis jetzt auch noch keine Hilfe erhalten.
Ich bräuchte jemand, der sich im SAP sowie in Word97 so gut auskennt, daß ich genau die passenden Methoden einbauen kann.

Mach's gut.
Gruß
Conny

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Conny,

ich habe für obiges Word 2003 benutzt. Es kann natürlich schon sein bzw. es ist sehr wahrscheinlich, daß die Befehle unter Word 97 noch etwas anders lauten.
Was für ein R/3-Release habt Ihr denn?
Im Grunde mußt Du hergehen und unter Word einen Makro zum Suchen und Ersetzen aufzeichnen. Dann schaust Du im aufgezeichneten Makro nach, welche Methode er hierzu aufruft. Die kannst Du hier gerne posten, dann versuche ich Dir bei der Umsetzung im SAP zu helfen. So schwer ist das nicht.

Was passiert bei Dir eigentlich, wenn Du statt 'WORD.BASIC' das von mir benutzte 'WORD.APPLICATION' verwendest? In Transaktion SOLE kannst Du übrigens nachschauen, was dort als CLS-ID (aus der Windows-Registry) eingetragen ist.

Gruss,
Jens

Mein Coding

Beitrag von sureshraju ( / / 0 / 3 ) »
conmat hat geschrieben:Hallo Jens,

vielen Dank für deine Antwort, leider führt auch das noch nicht zu meinem gewollten Erfolg.
Hier mein Coding:

data: rueck type ole2_object,

create object word 'Word.Basic'.
call method of word 'AppShow'.
call method of word 'FileNew' = rueck
exporting #1 = 'c:\test'.

tmarke = 'EMAIL'.(FAX; TEL; usw.)
call method of word 'EditFind'
exporting #1 = tmarke.

p_string = adr6-smtp_addr.
call method of word 'Insert'
exporting #1 = p_string.

Textmarke EMAIL habe ich im Word unter Textmarken anlegen angelegt.

Ich möchte viele Textmarken füllen, habe das Abarbeiten der Textmarken in einem Loop hinterlegt.
Es funktioniert der einmalige Absprung zur ersten TExtmarke und auch der Insert des Textes an dieser STelle funktioniert, allerdings nur bei der ersten Textmarke, ab da schreibt er alles untereinander.
Siehe Beispiel Ausdruck


Tel./Fax/E-Mail
+49 7731 80-TEL / 80-FAX /
6361

Coiver Contract Srl

Cormano (MI)
Via Bizzozzero, 93
2089
MATHIS

Die 6361 z.B müsste er an die Textmarke FAX schreiben.
Dein Coding hab ich zwar eingebaut komm jedoch auch zu keinem anderen Ergebnis.
Vielleicht hast noch eine Idee, wenn du mein Coding siehst, bzw. erkennst vielleicht meinen Fehler, den
ich evtl. mache.
Vielen Dank.

Gruß
Conny

Beitrag von vbez (ForumUser / 7 / 0 / 0 ) »
Hallo,
ab 4.6c oder so, gibt es die Desktop Office Integration (DOI), das sind Klassen/Interfaces mit denen du Word steuern kannst. Schau dir mal die Beispielprogramme in der Entwicklungsklasse SOFFICEINTEGRATION an. Insbesondere die Programme SAPRDEMO_FORM_INTERFACE und SAPRDEMO_MAILMERGE_INTERFACE.

Beitrag von conmat ( / / 0 / 3 ) »
Hallo Jens,

zu deinen Fragen:

Was für ein R/3-Release habt Ihr denn?

BBPCRM 4.0

Was passiert bei Dir eigentlich, wenn Du statt 'WORD.BASIC' das von mir benutzte 'WORD.APPLICATION' verwendest?

Geht nicht bei mir ist in der TOLE nur WORD.PROAPPLICATION drin. Allerdings öffnet SAP nicht einmal mehr das WORD, wenn ich das austausche.

Versuche nun mal ein Makro anzulegen. Melde mich dann wieder.


Gruss,
Conny

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo Conny,

dann habt Ihr SAP-seitig einen sehr guten Stand. BBPCRM4.0 setzt auf einem WAS6.20 auf. Da ist die OLE-Automation sehr gut.
Schau Dir auch mal den Hinweis 127651 ein. Eigentlich braucht Ihr keinen Eintrag in der TOLE (siehe genannten Hinweis).

Das Problem ist halt, daß Office '97 ein ziemlich 'alter Schinken' ist. Habt Ihr nicht eine neuere Version? Ich denke damit würdest Du Dich auf jeden Fall um einiges leichter tun.

Gruss,
Jens

Vergleichbare Themen

2
Antw.
2298
Views
Reiter in MM01/MM02 gezielt anspringen
von linde1000 » 26.10.2007 12:55 • Verfasst in Dialogprogrammierung
8
Antw.
3282
Views
OLE - Word-Datei
von Kerstin » 16.07.2008 11:38 • Verfasst in ABAP® Core
2
Antw.
2404
Views
Word in SAPGui
von Beni » 24.10.2005 11:03 • Verfasst in Dialogprogrammierung
2
Antw.
1902
Views
Word ruft SAP
von sapalot » 08.09.2005 20:14 • Verfasst in ABAP® Core
4
Antw.
3267
Views
ABAP und Word?
von ROL_ABAP » 13.12.2012 21:34 • Verfasst in ABAP® für Anfänger

Ü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

Feldwerte vergleichen
vor 4 Stunden von wreichelt 2 / 27
Workflow-Datenfluss mit Multi-Line-Container
vor 6 Stunden von ewx gelöst 2 / 77
Mahnung erstellen
vor 10 Stunden von Sebastian82 4 / 112
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 105

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

Feldwerte vergleichen
vor 4 Stunden von wreichelt 2 / 27
Workflow-Datenfluss mit Multi-Line-Container
vor 6 Stunden von ewx gelöst 2 / 77
Mahnung erstellen
vor 10 Stunden von Sebastian82 4 / 112
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 105

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 2 Tagen von Manfred K. 1 / 66
Export von Spools in XLSX
vor einer Woche von abapamateur 1 / 732
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 1333