OLE - Word-Dokument erstellen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
15 Beiträge • Seite 1 von 1
15 Beiträge Seite 1 von 1

OLE - Word-Dokument erstellen

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

ich versuche mich zum 1. Mal daran, ein Word-Dokument aus ABAP heraus zu erstellen. Dazu habe ich mir eine Vorlage aus dem Tricktresor herausgesucht. Nachdem ich mir das Umfeld angeschaut habe, habe ich festgestellt, in welchen Tabellen die entsprtechenden Methoden zu finden sind.
Mein Problem ist jetzt die Qual der Wahl der Methode. Woher weiss ich, welche der vielen Methoden ich in welcher Form anwenden muss?
Die namen der Methoden sind ja meist sprechend, aber trotzdem wäre eine Art Doku nicht schlecht.

Bin für jede Hilfe dankbar

Gruß
Kerstin

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


Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo Kerstin,
alle Methoden die Word kennt, sind in der technischen Doku zu MS-Word 95 beschrieben (Doku zu Visual Studio 6), das heisst allerdings nicht, das SAP alle diese Methoden auch würdigt. Ich benutze gerne eine kleine Methodensammlung in Form eines Includes mit Macros.

Code: Alles auswählen.

*--Include for OLE-enabling definitions
INCLUDE ole2incl .

*--Global variables
*--Variables to hold OLE object and entity handles
DATA gs_word TYPE ole2_object . "OLE object handle
DATA gs_documents TYPE ole2_object . "Documents
DATA gs_actdoc TYPE ole2_object . "Active document
DATA gs_application TYPE ole2_object . "Application
DATA gs_options TYPE ole2_object . "Application options
DATA gs_actwin TYPE ole2_object . "Active window
DATA gs_actpan TYPE ole2_object . "Active pane
DATA gs_view TYPE ole2_object . "View
DATA gs_selection TYPE ole2_object . "Selection
DATA gs_font TYPE ole2_object . "Font
DATA gs_parformat TYPE ole2_object . "Paragraph format
DATA gs_tables TYPE ole2_object . "Tables
DATA gs_range TYPE ole2_object . "Range handle for various ranges
DATA gs_table TYPE ole2_object . "One table
DATA gs_table_border TYPE ole2_object . "Table border
DATA gs_cell TYPE ole2_object . "One cell of a table
DATA gs_paragraph TYPE ole2_object . "Paragraph
DATA gv_pos(5) TYPE n . "Position information for table

*--Setting font attributes
*SET PROPERTY OF gs_font 'Size' = '10' .
*SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
*SET PROPERTY OF gs_font 'Italic' = '1' . "Italic
*SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined

DEFINE WordCreate.
*--Creating OLE object handle variable
*CREATE OBJECT gs_word 'WORD.APPLICATION' .
*IF sy-subrc NE 0 .
*MESSAGE s000(su) WITH 'Error while creating OLE object!'.
*LEAVE PROGRAM .
*ENDIF .
    CREATE OBJECT gs_word 'Word.Basic'.
    CALL METHOD OF gs_word 'FileNew'
         EXPORTING #1 = 'normal.dot'.

END-OF-DEFINITION.

DEFINE WordFree.
FREE OBJECT gs_word .
END-OF-DEFINITION.

*--Setting object's visibility property
define WordVisible.
if &1 = '0'.
CALL METHOD OF gs_word 'AppHide'.
else.
CALL METHOD OF gs_word 'AppShow'.
endif.
END-OF-DEFINITION.

DEFINE WordFontName.
CALL METHOD OF gs_word 'Font' EXPORTING #01 = &1.
END-OF-DEFINITION.

DEFINE WordFontSize.
CALL METHOD OF gs_word 'Size' EXPORTING #01 = &1.
END-OF-DEFINITION.

DEFINE WordInsert.
CALL METHOD OF gs_word 'Insert' EXPORTING #01 = &1.
END-OF-DEFINITION.

DEFINE create_new_instance.
  create object gs_word 'Word.Basic.8'.
END-OF-DEFINITION.

DEFINE appshow.
  call method of gs_word 'AppShow'.
END-OF-DEFINITION.

DEFINE apphide.
  call method of gs_word 'AppHide'.
END-OF-DEFINITION.

DEFINE filenew.
  call method of gs_word 'FileNew'
    exporting
      #1 = 'normal.dot'.
END-OF-DEFINITION.

DEFINE fileopen.
  call method of gs_word 'FileOpen'
    exporting
      #1 = &1.
END-OF-DEFINITION.

DEFINE filesaveas.
  call method of gs_word 'FileSaveAs'
    exporting
      #1 = &1.
END-OF-DEFINITION.

DEFINE filecloseall.
  call method of gs_word 'FileCloseAll'
    exporting
      #1 = 2.
END-OF-DEFINITION.

DEFINE editreplace.
*EditReplace [.Find = text] [.Replace = text]
*[.Direction = number] [.MatchCase = number]
*[.WholeWord = number]
*[.PatternMatch = number]
*[.SoundsLike = number] [.FindNext]
*[.ReplaceOne] [.ReplaceAll]
*[.Format = number] [.Wrap = number]

  call method of gs_word 'EditReplace'
    exporting
      #01 = &1
      #02 = &2
      #03 = 0
      #04 = 0
      #05 = 0
      #06 = 0
      #07 = 0
      #08 = 0
      #09 = 0
      #10 = 1
      #11 = 0
      #12 = 1.
END-OF-DEFINITION.

DEFINE font.
  call method of gs_word 'Font' exporting #01 = &1.
  call method of gs_word 'FontSize' exporting #1 = &2.
END-OF-DEFINITION.

DEFINE insert1.
  call method of gs_word 'Insert' exporting #1 = &1.
END-OF-DEFINITION.

DEFINE viewheader.
  call method of gs_word 'ViewHeader'.
END-OF-DEFINITION.

DEFINE closeviewheaderfooter.
*** Kopffenster wieder schließen
  call method of gs_word 'CloseViewHeaderFooter'.
END-OF-DEFINITION.

DEFINE CharCol.
*Color Explanation
*0    (zero) Auto
*1    Black
*2    Blue
*3    Cyan
*4    Green
*5    Magenta
*6    Red
*7    Yellow
*8    White
*9    Dark Blue
*10   Dark Cyan
*11   Dark Green
*12   Dark Magenta
*13   Dark Red
*14   Dark Yellow
*15   Dark Gray
*16   Light Gray

* &1 = integer !!!
call method of gs_word 'CharColor'
     exporting
               #01 = &1.
END-OF-DEFINITION.


*FORM write_text USING text font size look.
*
*  CALL METHOD OF gs_word 'Font' EXPORTING #01 = font.
*  CALL METHOD OF gs_word 'FontSize' EXPORTING #1 = size.
*
*  IF look NE ''.
*    CALL METHOD OF gs_word look.
*  ENDIF.
*
*  CALL METHOD OF gs_word 'Insert' EXPORTING #1 = text.
*
*ENDFORM.                    "write_text
Der Include wird dann in den Report eingebaut.

gruß Tron
Zuletzt geändert von Tron am 08.04.2008 21:43, insgesamt 1-mal geändert.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

ich habe leider nur MS Word 2003. komme ich an die Dokus dort auch irgendwie ran und wo finde ich denn die 'Technische Doku'?

Gruß
Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo, die Word - Version spielt nur gelegentlich eine Rolle.
Die Doku ist wahrscheinlich auch Online im MSDN (Microsoft Developer Network) zu finden. Ich schlage mal vor, Du implementierst das Makro und machst mal einen kleinen Test. Dazu mal ein Worddok mit dem namen 000.doc in das Verzeichnis C:\000 bringen/erstellen.Z.B.:

Code: Alles auswählen.

* Eröffne Instanz
  create_new_instance.
  appshow.
  fileopen 'c:\temp\000.doc'.
  filesaveas 'c:\temp\001.doc'.
  filecloseall.
  FREE OBJECT gs_word.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

ich habe das Makro eingebaut und versucht den Test nachzuvollziehen. Leider öffnet er weder meine vorhandene Datei, noch speichert er diese mit dem neuen Namen ab. der einzige Effekt ist der, dass Word ohne Dokument gestartet wird.
Ich habe auch im MSDN gegrast, aber so richtig fündig bin ich nicht geworden.

Gruß
Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo,
ich habe die Makros nochmal aktualisiert,(s.o.)

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZTEST9
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ztest9.

* Makro include
include Y_WORD_OLE.

parameters : text(20).

WordCreate.

appshow.

do 20 times.
CALL METHOD OF gs_word 'Insert' EXPORTING #1 = text.
enddo.

filesaveas 'C:\abs.doc'.

filecloseall.

FREE OBJECT gs_word .
Das Coding erzeugt eine Word-datei, mit einem Text via Parameters und speichert das Ganze auf Laufwerk C:\ mit dem Namen abs.doc.

Bei mir wird Word geöffnet und der Text wird sichtbar geschrieben und danach gespeichert.
(welche Befehle von Word brauchst Du den noch ?)
gruß Tron
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

habe dein neues Beispiel ausprobiert.
Bei mir wird Word geöffnet, der Text sichtbar geschrieben und dann bleibt alles stehen. Das Speichern müsste ich dann manuell durchführen. Kann das eventuell damit zu tun haben, dass bei mir SAP-System über einen Citrix-Server mit dem PC verbunden ist?

Ansonsten habe ich noch folgendes Problem:
Ich habe Textzeilen in einer itab abgespeichert. Dieser Text soll im Word-Dokument formatiert ausgegeben werden. Die Schriftart und -grösse haut hin, aber ich möchte nach bestimmten Zeilen einen Absatz habe.
Ich gebe folgende Zeilen aus:

wordcreate.
appshow.
CALL METHOD OF h_word 'FilePageSetup'
EXPORTING #6 = '1 cm'.
font font size.
CALL METHOD OF h_word 'LeftPara'. <-- Absatz ????
insert1 text.
filesaveas 'D:\Eigene Dateien\LMBV\LMBV-PS\zrkom1.doc'.
filecloseall.
FREE OBJECT h_word.

Der Text wird in meinem Dokument hintereinaderweg ohne Absatz fortgeschrieben und automatisch gespeichert wird er auch nicht..

Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo Kerstin,
1.) Damit Word den Text abspeichern kann, muß Du Schreibrechte für das Zielverzeichnis deines PCs haben.
2.) Jede Deiner Itab Zeilen benötigen ein "Return/Linefeed" siehe Constants
3.) Formatierungen einer Zeile mit am besten mit "FormatTabs"
4.) Um Probleme beim Testen zu vermeiden, verwende nicht Word als OUTLOOK-Editor (oder in Zusammenhang mit irgend einer Applikation.(siehe Taskmanager des Betriebssystems)
5.) Prüfe,ob die verwendeten Methoden auch in der Tabelle OLELOAD aufgeführt sind !
6.) Es kann möglich sein, dass Parameter manchmal als integer datentyp übergeben werden muss.
7.) deklariere den Exportparameter nicht #1, sondern #01, wenn mehr als 9
Exportparameter erforderlich sind.
8.) Wenn eine Methode 6 Parameter ewartet, aber nur der 6.te Parameter benötigt wird, würde ich nicht 5 davon auslassen.

Code: Alles auswählen.

* Nützliche Konstanten 
CONSTANTS crlf(2) VALUE %_cr_lf.
CONSTANTS htab(1) VALUE %_horizontal_tab.

* Gebe eine Textzeile aus
  PERFORM write_text USING crlf 'Calligraphic' 18 ''.
  PERFORM write_text USING 'Hallo' 'Arial' 13 'Bold'.
  PERFORM write_text USING crlf 'Calligraphic' 18 ''.

*oder

  PERFORM write_text USING crlf 'Arial' 10 ''.
  PERFORM write_text USING htab 'Arial' 10 ''.
  PERFORM write_text USING '? Kerstin' 'Arial' 10 ''.
  PERFORM write_text USING crlf 'Arial' 10 ''.




* Routine für Textausgabe in Word
FORM write_text USING text font size look.

  CALL METHOD OF gs_word 'Font' EXPORTING #01 = font.
  CALL METHOD OF gs_word 'FontSize' EXPORTING #1 = size.

  IF look NE ''.
    CALL METHOD OF gs_word look.
  ENDIF.

  CALL METHOD OF gs_word 'Insert' EXPORTING #1 = text.

ENDFORM.                    "write_text

* gehe zum Ende des dokuments
*  CALL METHOD OF gs_word 'EndOfDocument'.


* Neue Seite
*  CALL METHOD OF gs_word 'InsertPageBreak'.

* Setze Tabulator in der aktuellen Zeile

* CALL METHOD OF gs_word 'FormatTabs'
*   EXPORTING
*  #01 = '14'       "Tab position
*  #02 = '1.25'     "Default Tabposition
*  #03 = '0'        "CONSTANT ??
*  #04 = '2'        "Alignment 0=left/1=center/2=right
*  #05 = '1'        "/2=minus/3=continous line
*  #06 = '0'        "Fill with 0=space/1=points
*  #07 = '0'        "CONSTANT ??
*  #08 = '3'.       "Tabstop 0=set/1=clear/3=clear all
Ich weiß, das Ganze kann ganz schön knifflig werden, aber nur Mut !
gruß Tron :wink:
(Ps.:Ich verwende auch Word 2003)
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

vielen Dank für Deine Tipps.

Also Schreibrechte habe ich auf jeden Fall, denn wenn ich das WordDokument manuell schliesse, fragt er mich, ob ich speichern möchte und das geht dann auch.

Die Sache mit dem CRLF klingt gut, allerdings macht der Syntaxchecker in 4.6C nicht mit (Im Release 7.00 klappt es wunderbar):
Die Konstantendefinition wird angemeckert:
CONSTANTS crlf(2) VALUE %_cr_lf.
'Feld "%_CR_LF" unbekannt. Es ist weder in einer der angegebenen
Tabellen enthalten noch durch eine "DATA"-Anweisung definiert.'

Wie definiere ich eine Konstante für einen Zeilenvorschub im 4.6C?

Wir befinden uns gerade mitten im Releasewechsel. Das Programm muss ich aber noch unter 4.6C fertig stellen

Ich habe noch eine grundsätzliche Frage: Woher weiss ich , wofür die einzelnen Parameter der Methoden zuständig sind. In der MSDN habe ich die einzelnen Methoden auch nicht wirklich dokumentiert gefunden.

Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo Kerstin,

Hier die Definition crlf (hex 0d0a) unf htab (hex 09) für 4.6 Systeme.

Code: Alles auswählen.

data htab type c.
data crlf(2) type c.
*
CLASS cl_abap_char_utilities DEFINITION LOAD.
crlf = cl_abap_char_utilities=>cr_lf.
htab = cl_abap_char_utilities=>HORIZONTAL_TAB.
muss im obigen Coding ersetzt werden.

woran man erkennt wieviele Parameter eine Methode besitzt:

Code: Alles auswählen.


Definition aus der WORD-Help Datei (=12 Parameter)

*EditReplace [.Find = text] [.Replace = text] 
*[.Direction = number] [.MatchCase = number] 
*[.WholeWord = number] 
*[.PatternMatch = number] 
*[.SoundsLike = number] [.FindNext] 
*[.ReplaceOne] [.ReplaceAll] 
*[.Format = number] [.Wrap = number] 

Umsetzung in ABAP-Methoden-Aufruf (= 12 Parameter)

  call method of gs_word 'EditReplace' 
    exporting 
      #01 = &1 
      #02 = &2 
      #03 = 0 
      #04 = 0 
      #05 = 0 
      #06 = 0 
      #07 = 0 
      #08 = 0 
      #09 = 0 
      #10 = 1 
      #11 = 0 
      #12 = 1. 

TIP:
In meinem Word - Projekt hatte ich eine Word Vorlage benutzt, die mit Platzhaltern gefüllt ist z.B.

Code: Alles auswählen.

Sehr geehrte $0001.
Das Abap Programm öffnet die Vorlage und speichert diese sofort unter einem neuen Namen ab. Dann folgen die Textersetzungen. Die Platzhalter werden dabei mit EDITREPLACE durch sinnvolle Texte ausgetauscht, das Verfahren geht am schnellsten. Der Word - Cursor wird dabei nicht bewegt und verbleibt an der ersten Stelle des Dokuments. Muss dann noch Text angefügt werden, dann mit der Methode 'EndOfDocument' den Word-Cursor an das Ende des Dokuments plazieren und Insert - Befehle absetzen.

Hier ein Beispielcoding für Rel. 4.6 (getestet)

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZTEST1                                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ztest1                        .

INCLUDE y_word_ole.

DATA htab TYPE c.
DATA crlf(2) TYPE c.

DATA ltab TYPE TABLE OF tab512 WITH HEADER LINE.
DATA options TYPE TABLE OF rfc_db_opt.
DATA fields TYPE TABLE OF rfc_db_fld WITH HEADER LINE.

* in 4.7 gibt es Konstanten dafür
CLASS cl_abap_char_utilities DEFINITION LOAD.
crlf = cl_abap_char_utilities=>cr_lf.
htab = cl_abap_char_utilities=>horizontal_tab.

fields-fieldname = 'CARRID'. append fields.
fields-fieldname = 'CONNID'. append fields.
fields-fieldname = 'FLDATE'. append fields.
fields-fieldname = 'PRICE'. append fields.
fields-fieldname = 'CURRENCY'. append fields.
fields-fieldname = 'PLANETYPE'. append fields.

CALL FUNCTION 'RFC_READ_TABLE'
  EXPORTING
    query_table                = 'SFLIGHT'
    delimiter                  = htab
*   NO_DATA                    = ' '
*   ROWSKIPS                   = 0
*   ROWCOUNT                   = 10
  TABLES
    options                    = options
    fields                     = fields
    data                       = ltab
 EXCEPTIONS
   table_not_available        = 1
   table_without_data         = 2
   option_not_valid           = 3
   field_not_valid            = 4
   not_authorized             = 5
   data_buffer_exceeded       = 6
   OTHERS                     = 7.

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


* Erzeuge WORD - Instanz
create_new_instance.
* Neue Datei
filenew.
* WORD sichtbar (unsichtbar geht schneller) für Test
CALL METHOD OF gs_word 'AppShow'.


* Daten aus ltab in Word einfügen
LOOP AT ltab.
* BEISPIEL TABULATOR SETZEN
*FormatTabs [.Position = text] [, .DefTabs = number or text]
*[, .Align = number] [, .Leader = number]
*[, .Set] [, .Clear] [, .ClearAll]

*Argument Explanation
*
*.Position Position of the tab stop in a text measurement
*.DefTabs Position for default tab stops
* in the document in points or a text measurement
*
*Argument Explanation
*.Align Alignment of the tab stop:
*0 (zero) Left
*1 Center
*2 Right
*3 Decimal
*4 Bar
*
*.Leader  The leader character for the tab stop:
*0 (zero) None
*1 Period
*2 Hyphen
*3 Underscore
*
*.Set Sets the specified custom tab stop.
*.Clear Clears the specified custom tab stop.
*.ClearAll Clears all custom tab stops.


  CALL METHOD OF gs_word 'FormatTabs'
    EXPORTING
   #01 = '0.5'    "Tab position
   #02 = '1'      "Default Tabposition
   #03 = 0        "leader character
   #04 = 0        "Alignment 0=left/1=center/2=right
   #05 = 1        "Tabstop set
   #06 = 0        "Tabstop clear
   #07 = 0.       "Tabstop clear all

*Textzeile ausgeben
  PERFORM write_text USING ltab 'Courier New' 8 ''.
*Return ausgeben
  insert1 crlf.

ENDLOOP.

* Abspeichern
filesaveas 'C:\temp\Test.doc'.
* Word schliessen
CALL METHOD OF gs_word 'AppClose'.
* Objekt freigeben
wordfree.
* ..und Tschüss
EXIT.

*_______________________________________________________

* Textzeile ausgeben
FORM write_text USING text font size look.

  CALL METHOD OF gs_word 'Font' EXPORTING #01 = font.
  CALL METHOD OF gs_word 'FontSize' EXPORTING #1 = size.

  IF look NE ''.
    CALL METHOD OF gs_word look.
  ENDIF.

  CALL METHOD OF gs_word 'Insert' EXPORTING #1 = text.

ENDFORM.                                                    "write_text
viel Erfolg Tron :)

unter https://www.sdn.sap.com/irj/sdn/go/port ... ddb3227820
hab ich noch eine interessante Pdf-Doku gefunden.
Zuletzt geändert von Tron am 14.04.2008 18:24, insgesamt 1-mal geändert.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

das Abspeichern funktioniert bei mir jetzt auch. Es liegt daran, dass ich normalerweise über einen Citrix-Server mit dem Kundennetz verbunden bin. Arbeite ich direkt im Kundennetz, so funzt es.

Aber den ordentlichen Zeilenvorschub konnte ich auch bei Deinem Beispiel nicht nachvollziehen. Gibt es denn in 4.6C keine Möglichkeit einen CRLF als value-Parameter mitzugeben, so wie in 4.7? Mit dem KLassenattribut klappt es ja wunderbar.

Viele Grüsse
Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo Kerstin, toll das es vorangeht.
Das Problem mit CRLF und HTAB ist, die Codes in ein Char-typ aufzunehmen, ohne das die Typkonvertierung zuschlägt.
Tja, die Möglichkeit CRLF als Char-Konstante in rel 4.6 zu definieren, kenne ich im Moment nicht, allerdings geht CRLF auch mit dieser Methode:

Code: Alles auswählen.

*InsertBreak [.Type = number]
*
*0 (zero) or omitted Page break
*1 Column break
*2 Next Page section break
*3 Continuous section break
*4 Even Page section break
*5 Odd Page section break
*6 Line break (newline character)

* TESTET in 4.6
CALL METHOD OF gs_word 'InsertBreak'
    EXPORTING
   #01 = 6.
Die Möglichkeit eine Konstante via Klasse zu definieren, gibt es meines Wissens erst ab Rel 4.7. , aber Du kannst obiges Beispiel ja in die Makro-definitionen aufnehmen.(Dann bliebe nur noch der Htab zu klären.)

gruß Tron :wink:
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

ich bin begeistert.
Die Methode 'InsertBreak' hat es gebracht. er macht jetzt Zeilenvorschübe.
Allerdings gibt es für mich noch das Problem, dass ich in bestimmten Abhängigkeiten die Zeile Fett drucken muss.
Ich frage das ab und übergebe dann auch den entsprechenden Parameter an die Form 'write_text'. Der Report durchläuft das auch alles richtig. Allerdings mit dem Effekt, dass das Umschalten zwischen Fett und nichtfett nicht richtig klappt.
Im Release 4.7 gibt es da keine Probleme. Der einzige Unterschied zwischen beiden Reports ist die Realisierung des Zeilenvorschubs.

Ich denke, dass der htab als Feldbegrenzer für mich im Augenblick nicht erforderlich ist, da ich ja nur Text ausgebe.

Gibt es auch eine Möglichkeit den Text als Blocksatz zu formatieren?

Ich habe Dir mehrere eMail-Adressen wegen der MSDN-Doku geschickt. Ich hoffe dass die 6MB ankommen.

Viele Grüsse
Kerstin

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Ok, hier mal "Ein Kessel Buntes":

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZTEST1                                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ztest1                        .

INCLUDE y_word_ole.

DATA htab TYPE c.
DATA crlf(2) TYPE c.

DATA tabpos(4) TYPE p DECIMALS 1.
DATA pos(4).


DATA: BEGIN OF sf OCCURS 0,
  carrid TYPE s_carr_id,
  connid TYPE s_conn_id,
  fldate TYPE s_date,
  price  TYPE s_price,
  currency TYPE s_currcode,
  planetype TYPE s_planetye,
END OF sf.

DATA temp(10).


* in 4.7 gibt es Konstanten dafür
CLASS cl_abap_char_utilities DEFINITION LOAD.
crlf = cl_abap_char_utilities=>cr_lf.
htab = cl_abap_char_utilities=>horizontal_tab.


* Erzeuge WORD - Instanz
create_new_instance.
* Neue Datei
filenew.
* WORD sichtbar (unsichtbar geht schneller) für Test
CALL METHOD OF gs_word 'AppShow'.



SELECT * FROM sflight INTO CORRESPONDING FIELDS OF sf.
*up to 20 rows.
  APPEND sf.
ENDSELECT.


LOOP AT sf.

*Textzeile ausgeben
  charcol 1.
  PERFORM write_text USING sf-carrid 'Verdana' 10 'b'.
  insert1 htab.

*Textzeile ausgeben
  charcol 2.
  PERFORM write_text USING sf-connid 'Verdana' 10 'i'.
  insert1 htab.

*Textzeile ausgeben
  charcol 3.
  PERFORM write_text USING sf-fldate 'Verdana' 10 'u'.
  insert1 htab.

*Textzeile ausgeben
  WRITE sf-price TO temp.

  charcol 4.
  PERFORM write_text USING temp 'Verdana' 10 ''.
  insert1 htab.

*Textzeile ausgeben
  charcol 5.
  PERFORM write_text USING sf-currency 'Verdana' 10 'bu'.
  insert1 htab.

*Textzeile ausgeben
  charcol 6.
  PERFORM write_text USING sf-planetype 'Verdana' 10 'iu'.
  insert1 htab.

*InsertBreak [.Type = number]
*
*0 (zero) or omitted Page break
*1 Column break
*2 Next Page section break
*3 Continuous section break
*4 Even Page section break
*5 Odd Page section break
*6 Line break (newline character)

  CALL METHOD OF gs_word 'InsertBreak'
      EXPORTING
     #01 = 6.

ENDLOOP.

* Abspeichern
filesaveas 'C:\temp\Test.doc'.
* Word schliessen
CALL METHOD OF gs_word 'AppClose'.
* Objekt freigeben
wordfree.
* ..uns Tschüss
EXIT.

*_______________________________________________________

* Text ausgeben
FORM write_text USING text font size look.

  CALL METHOD OF gs_word 'Font' EXPORTING #01 = font.
  CALL METHOD OF gs_word 'FontSize' EXPORTING #1 = size.

  IF look CA 'b'.
    CALL METHOD OF gs_word 'Bold' EXPORTING #01 = 1.
  ENDIF.
  IF look CA 'i'.
    CALL METHOD OF gs_word 'Italic' EXPORTING #01 = 1.
  ENDIF.
  IF look CA 'u'.
    CALL METHOD OF gs_word 'Underline' EXPORTING #01 = 1.
  ENDIF.

  CALL METHOD OF gs_word 'Insert' EXPORTING #1 = text.

  IF NOT look IS INITIAL.
    CALL METHOD OF gs_word 'Bold' EXPORTING #01 = 0.
    CALL METHOD OF gs_word 'Italic' EXPORTING #01 = 0.
    CALL METHOD OF gs_word 'Underline' EXPORTING #01 = 0.
  ENDIF.

ENDFORM.                                                    "write_text
In diesem Beispiel wird alles verabeitet Fett Unterstrichen Italic und Farben.
Ich hoffe das alles verständlich ist ?

gruß Tron :wink:

Ps. keine Mail bekommen.
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

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

ich danke dir wie verrückt.

Jetzt sieht es sehr gut aus. Das Rücksetzen des Fettdruckes hatte ich nicht gemacht.

Vielleicht kannst Du mir die MSDN-Doku ja mal schicken.

Ich wünsche Dir noch einen schönen Tag.

Viele Grüsse
Kerstin

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3300
Views
Word Dokument aus ABAP erstellen
von ROL_ABAP » 15.02.2013 13:24 • Verfasst in ABAP® für Anfänger
2
Antw.
1684
Views
Word Dokument mit Wordvorlage aus ABAP erstellen
von msfox » 19.09.2019 11:35 • Verfasst in ABAP® für Anfänger
1
Antw.
1942
Views
WORD-Dokument Drucken aus SAP
von fip » 20.07.2007 08:23 • Verfasst in ABAP® Core
0
Antw.
1142
Views
Bild von SAP via OLE ins Word Dokument einfügen?
von Nicolas_ » 16.01.2006 13:08 • Verfasst in ABAP® Core
4
Antw.
3339
Views
Informationen in ein bestehendes Word Dokument einfügen
von sgevolker » 16.04.2009 09:50 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 15 Stunden von black_adept gelöst 23 / 3753
User Exit EXIT_RQCPRM10_001
vor 16 Stunden von a-dead-trousers 2 / 300
Trennen Strasse und Hausnummer
vor 21 Stunden von payten 13 / 10659
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1352

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

Dialog-Container mit Toolbar/Status
vor 15 Stunden von black_adept gelöst 23 / 3753
User Exit EXIT_RQCPRM10_001
vor 16 Stunden von a-dead-trousers 2 / 300
Trennen Strasse und Hausnummer
vor 21 Stunden von payten 13 / 10659
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1352

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2886
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9480