This blog describes how to download a Word Document to Presentation server using OLE method.
Data available in the form of Variables/Structures/Internal tables can be exported to MS Word using OLE. This blog also covers the basic formatting options involved in MS Word.
Functionalities covered in this blog include:
1) Inserting image from Presentation server
2) Setting Paragraph formats and Character formats
3) Display table with contents from Internal table
The Code snippet which is self-explainable is given below:
REPORT zdemo_ole_word.
*--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_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 gv_pos(5) TYPE n . "Position information for table
DATA gs_inlineshapes TYPE ole2_object.
DATA gs_ins_logo TYPE ole2_object.
DATA gt_sflight TYPE TABLE OF sflight.
START-OF-SELECTION .
PERFORM f_get_data.
PERFORM f_create_doc.
PERFORM f_attach_image.
PERFORM f_display_header.
PERFORM f_display_text.
PERFORM f_skip_lines.
PERFORM f_display_table.
PERFORM f_skip_lines.
PERFORM f_free_object.
PERFORM f_save_object.
PERFORM f_close_object.
*&---------------------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------------------*
* Get Data for displaying in Word
*----------------------------------------------------------------------*
FORM f_get_data .
SELECT *
FROM sflight
INTO TABLE gt_sflight
UP TO 10 ROWS.
ENDFORM. " F_GET_DATA
*&---------------------------------------------------------------------*
*& Form F_CREATE_DOC
*&---------------------------------------------------------------------*
* Create Word Document and Set its properties
*----------------------------------------------------------------------*
FORM f_create_doc .
*--Creating OLE object handle variable
CREATE OBJECT gs_word 'WORD.APPLICATION'.
IF sy-subrc NE 0 .
MESSAGE 'Error while creating OLE object!' TYPE 'E'.
LEAVE PROGRAM .
ENDIF .
*--Setting object's visibility property
*-- MS Word runs in the Background
*-- To see MS word in the Foreground, Set as '1'
SET PROPERTY OF gs_word 'Visible' = '1' .
*--Opening a new document
GET PROPERTY OF gs_word 'Documents' = gs_documents .
CALL METHOD OF gs_documents 'Add' .
*--Getting active document handle
GET PROPERTY OF gs_word 'ActiveDocument' = gs_actdoc .
*--Getting applications handle
GET PROPERTY OF gs_actdoc 'Application' = gs_application .
*--Setting the measurement unit
GET PROPERTY OF gs_application 'Options' = gs_options .
SET PROPERTY OF gs_options 'MeasurementUnit' = '1' . "CM
ENDFORM. " F_CREATE_DOC
*&---------------------------------------------------------------------*
*& Form F_ATTACH_IMAGE
*&---------------------------------------------------------------------*
* Attach an Image from Presentation server
*----------------------------------------------------------------------*
FORM f_attach_image .
*--Setting header content
*--Getting handle for the selection which is here the character at the
*--cursor position
GET PROPERTY OF gs_application 'Selection' = gs_selection .
GET PROPERTY OF gs_selection 'Font' = gs_font .
GET PROPERTY OF gs_selection 'ParagraphFormat' = gs_parformat .
*--Setting paragraph format attribute
SET PROPERTY OF gs_parformat 'Alignment' = '0' . "Left-justified
*--Insert Image from Presentation server
GET PROPERTY OF gs_selection 'InlineShapes' = gs_inlineshapes.
CALL METHOD OF gs_inlineshapes 'AddPicture' = gs_ins_logo
EXPORTING
#1 = 'C:\xxx\xxxxxx.jpg'.
ENDFORM. " F_ATTACH_IMAGE
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_HEADER
*&---------------------------------------------------------------------*
* Display Header text
*----------------------------------------------------------------------*
FORM f_display_header .
* Alignment:
* '0' - Left Alignment
* '1' - Centered
* '2' - Right Alignment
* '3' - Justified
*--Advancing cursor to the new line
CALL METHOD OF gs_selection 'TypeParagraph' .
*--Setting font attributes
SET PROPERTY OF gs_font 'Name' = 'Arial' .
SET PROPERTY OF gs_font 'Size' = '16' .
SET PROPERTY OF gs_font 'Bold' = '1' . "Bold
SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
SET PROPERTY OF gs_font 'Underline' = '1' . "Underlined
*--Setting paragraph format attribute
SET PROPERTY OF gs_parformat 'Alignment' = '1' . "Centered
CALL METHOD OF gs_selection 'TypeText'
EXPORTING
#1 = 'Download Word using OLE!'.
*--Advancing cursor to the new line
CALL METHOD OF gs_selection 'TypeParagraph' .
ENDFORM. " F_DISPLAY_HEADER
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_TEXT
*&---------------------------------------------------------------------*
* Display text and Set the font properties
*----------------------------------------------------------------------*
FORM f_display_text .
*--Reseting font attributes for Text
*--Getting handle for the selection which is here the character at the
*--cursor position
SET PROPERTY OF gs_font 'Name' = 'Times New Roman' .
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
*--Setting paragraph format attribute
SET PROPERTY OF gs_parformat 'Alignment' = '1' . "Centered
CALL METHOD OF gs_selection 'TypeText'
EXPORTING
#1 = 'Text 1'.
*--Advancing cursor to the new line
CALL METHOD OF gs_selection 'TypeParagraph' .
*--Reseting font attributes for another Text
SET PROPERTY OF gs_font 'Name' = 'Times New Roman' .
SET PROPERTY OF gs_font 'Size' = '12' .
SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Setting paragraph format attribute
SET PROPERTY OF gs_parformat 'Alignment' = '2' . "Right Aligned
CALL METHOD OF gs_selection 'TypeText'
EXPORTING
#1 = 'Text 2'.
ENDFORM. " F_DISPLAY_TEXT
*&---------------------------------------------------------------------*
*& Form F_SKIP_LINES
*&---------------------------------------------------------------------*
* Skip some lines
*----------------------------------------------------------------------*
FORM f_skip_lines .
*--Skip some lines
DO 4 TIMES .
CALL METHOD OF gs_selection 'TypeParagraph' .
ENDDO .
ENDFORM. " F_SKIP_LINES
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_TABLE
*&---------------------------------------------------------------------*
* Display Table using Internal table contents
*----------------------------------------------------------------------*
FORM f_display_table .
DATA: ls_sflight TYPE sflight,
lv_tabix TYPE sy-tabix,
lv_lines TYPE i.
DESCRIBE TABLE gt_sflight LINES lv_lines.
*--Inserting a table and filling some of its cells.
*--Getting entity handles for the entities on the way
GET PROPERTY OF gs_actdoc 'Tables' = gs_tables .
GET PROPERTY OF gs_selection 'Range' = gs_range .
*--Adding a table with required columns and rows
CALL METHOD OF gs_tables 'Add' = gs_table
EXPORTING
#1 = gs_range " Handle for range entity
#2 = lv_lines "Number of rows
#3 = '2'. "Number of columns
*--Setting border attribute for the table
GET PROPERTY OF gs_table 'Borders' = gs_table_border .
SET PROPERTY OF gs_table_border 'Enable' = '1' . "With border
*--Reseting font attributes for table content
SET PROPERTY OF gs_font 'Name' = 'Garamond' .
SET PROPERTY OF gs_font 'Size' = '11' .
SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
SET PROPERTY OF gs_font 'Color' = 'wdColorRed' . "Red
*--Filling the table with Internal Table data
LOOP AT gt_sflight INTO ls_sflight.
CLEAR lv_tabix.
lv_tabix = sy-tabix.
*--Getting cell coordinates
CALL METHOD OF gs_table 'Cell' = gs_cell
EXPORTING
#1 = lv_tabix "Row number
#2 = '1'. "first column
*--Getting the range handle to write the text
GET PROPERTY OF gs_cell 'Range' = gs_range .
*--Filling the cell
SET PROPERTY OF gs_range 'Text' = ls_sflight-carrid .
*--Getting cell coordinates
CALL METHOD OF gs_table 'Cell' = gs_cell
EXPORTING
#1 = lv_tabix "Row number
#2 = '2'. "Second column
*--Getting the range handle to write the text
GET PROPERTY OF gs_cell 'Range' = gs_range .
*--Filling the cell
SET PROPERTY OF gs_range 'Text' = ls_sflight-connid .
ENDLOOP.
*--Advancing the cursor to the end of the table
GET PROPERTY OF gs_table 'Range' = gs_range .
GET PROPERTY OF gs_range 'End' = gv_pos .
SET PROPERTY OF gs_range 'Start' = gv_pos .
CALL METHOD OF gs_range 'Select' .
ENDFORM. " F_DISPLAY_TABLE
*&---------------------------------------------------------------------*
*& Form F_FREE_OBJECT
*&---------------------------------------------------------------------*
* Free Object
*----------------------------------------------------------------------*
FORM f_free_object .
*--Freeing object handle variable
FREE OBJECT gs_word.
ENDFORM. " F_FREE_OBJECT
*&---------------------------------------------------------------------*
*& Form F_SAVE_OBJECT
*&---------------------------------------------------------------------*
* Save Object in Presentation server
*----------------------------------------------------------------------*
FORM f_save_object .
*--Save the Word Doc in Presentation Server
CALL METHOD OF gs_actdoc 'SaveAs2'
EXPORTING #1 = 'C:\xxxxx\xxxxxx.docx'.
ENDFORM. " F_SAVE_OBJECT
*&---------------------------------------------------------------------*
*& Form F_CLOSE_OBJECT
*&---------------------------------------------------------------------*
* Close Object
*----------------------------------------------------------------------*
FORM f_close_object .
*--Close the Document
CALL METHOD OF gs_actdoc 'Close'.
ENDFORM. " F_CLOSE_OBJECT