Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
Yeshica
Discoverer
2,050

In this blog, we’ll explore how to use OLE objects in SAP ABAP to automate tasks in Microsoft Word. We will cover the basics, including how to create an OLE object, manipulate data, and handle errors.

Introduction to OLE in SAP ABAP

OLE Automation in ABAP enables you to control Microsoft Office applications. You can create documents, fill in data, format cells, and even run macros—all from within your ABAP programs. This is particularly useful for generating reports, exporting data, and performing complex calculations.

Prerequisites

Before you begin, ensure that:

You have access to a Microsoft Office installation on the machine running the SAP GUI.

You have basic knowledge of ABAP programming.

Creating an OLE Object

To start using OLE in ABAP, you first need to create an OLE object. The CREATE OBJECT statement in ABAP is used for this purpose.

This code will extract the data from database table ‘mara’ and populate into the word file using the concept of OLE .

 

 

REPORT ZTEST_BLOGYS.
PARAMETERS: p_file  TYPE localfile DEFAULT 'C:\Users\Yeshica.Sharma\Downloads\p0.docx'.   “we are declaring file pathwhere we  need to store word file. 
INCLUDE ole2incl.

 

We are declaring data and creating ole object

 

DATA:        “we are declaring data for ole object
  ***      OLE Object
  gs_word           TYPE    ole2_object, "Word Object
  gs_documents      TYPE ole2_object, "List of documents
  gs_document       TYPE ole2_object, "Current / Active document
  gs_selection      TYPE ole2_object, "Current Cursor Selection
  gs_actdoc         TYPE ole2_object , "Active document
  gs_font           TYPE ole2_object , "Font
  gs_parformat      TYPE ole2_object , "Paragraph format
  gs_tables         TYPE ole2_object , "Tables
  gs_table          TYPE ole2_object,
  gs_range          TYPE ole2_object,
  gs_cell           TYPE ole2_object,
  gs_border         TYPE ole2_object,
  gs_interior       TYPE ole2_object,
  gs_application    TYPE ole2_object, "Application
  gv_pos(5)         TYPE n , "Position information for table
  wf_lines          TYPE i,
  wf_counter        TYPE i,
  lv_date           TYPE char15,
  lv_data           TYPE string,
  lv_copyrightdata  TYPE string.
  "Create word object
   CREATE OBJECT gs_word 'WORD.APPLICATION'.
* Setting object's visibility property
  SET PROPERTY OF gs_word 'Visible' = 1.
*  Opening a new document
  CALL METHOD OF gs_word 'Documents' = gs_documents.
  CALL METHOD OF gs_documents 'Add' = gs_document.
*  Activating the sheet
  CALL METHOD OF gs_document 'Activate'.
* Getting active document handle
  GET PROPERTY OF gs_word 'ActiveDocument' = gs_actdoc.
*  Getting applications handle
  GET PROPERTY OF gs_actdoc 'Application' = gs_application.
* 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.

 

We are declaring data and getting a data from Database table Mara

 

Types : Begin of ty_mara,
        Matnr type mara-matnr,
        ersda type mara-ersda,
        ernam type mara-ernam,
        end of ty_mara.
data : it_mara type table of mara,
       wa_mara type mara.
select matnr ersda ernam from mara into corresponding fields of table it_mara UP TO 5 ROWS.

 

We are creating table and populating data into a word file

 

CALL METHOD OF gs_selection 'TypeText'
    EXPORTING
      #1 = 'DATA OF MARA TABLE'.
      GET PROPERTY OF gs_actdoc 'Tables' = gs_tables.
      GET PROPERTY OF gs_selection 'Range' = gs_range.
      DESCRIBE TABLE it_mara LINES wf_lines.
      wf_lines = wf_lines + 1.
      IF sy-subrc NE 0. 
      ENDIF.
      CALL METHOD OF gs_tables 'Add' = gs_table
              EXPORTING #1 = gs_range
                        #2 = wf_lines
                        #3 = '3'. "Columns
      GET PROPERTY OF gs_table 'Borders' = gs_border.
      SET PROPERTY OF gs_border 'Enable' = '1'.
      IF sy-subrc NE 0. 
      ENDIF.
      CALL METHOD OF gs_table 'Cell' = gs_cell
      EXPORTING #1 = '1'
      #2 = '1'.
*  *setting the bg color
      CALL METHOD OF gs_cell 'Shading' = gs_interior.
      SET PROPERTY OF gs_interior 'BackgroundPatternColor' = -570376193.
      GET PROPERTY OF gs_cell 'Range' = gs_range.
      SET PROPERTY OF gs_range 'Text' = 'matnr'.
      CALL METHOD OF gs_range 'Font' = gs_font.
      SET PROPERTY OF gs_font 'Bold' = '1'. " Make the text bold
      CALL METHOD OF gs_range 'SetFont' = gs_font.
      IF sy-subrc NE 0. ENDIF.
************************* Col 2
      CALL METHOD OF gs_table 'Cell' = gs_cell
        EXPORTING #1 = '1'
        #2 = '2'.
*  *setting the bg color
      CALL METHOD OF gs_cell 'Shading' = gs_interior.
      SET PROPERTY OF gs_interior 'BackgroundPatternColor' = -570376193.
      GET PROPERTY OF gs_cell 'Range' = gs_range.
      SET PROPERTY OF gs_range 'Text' = 'ersda'.
      CALL METHOD OF gs_range 'Font' = gs_font.
      SET PROPERTY OF gs_font 'Bold' = '1'. " Make the text bold
      CALL METHOD OF gs_range 'SetFont' = gs_font.
      IF sy-subrc NE 0. ENDIF.
**********************  Col 3
      CALL METHOD OF gs_table 'Cell' = gs_cell
        EXPORTING #1 = '1'
        #2 = '3'.
*  *setting the bg color
      CALL METHOD OF gs_cell 'Shading' = gs_interior.
      SET PROPERTY OF gs_interior 'BackgroundPatternColor' = -570376193.
      GET PROPERTY OF gs_cell 'Range' = gs_range.
      SET PROPERTY OF gs_range 'Text' = 'ernam'.
      CALL METHOD OF gs_range 'Font' = gs_font.
      SET PROPERTY OF gs_font 'Bold' = '1'. " Make the text bold
      CALL METHOD OF gs_range 'SetFont' = gs_font.
      IF sy-subrc NE 0. 
      ENDIF.
      wf_counter = 1.
      LOOP AT it_mara INTO wa_mara.
      wf_counter = wf_counter + 1.
       CALL METHOD OF gs_table 'Cell' = gs_cell
         EXPORTING #1 = wf_counter
         #2 = '1'.
        GET PROPERTY OF gs_cell 'Range' = gs_range.
        SET PROPERTY OF gs_range 'Text' = wa_mara-matnr.
        IF sy-subrc NE 0.
        ENDIF.
       CALL METHOD OF gs_table 'Cell' = gs_cell
          EXPORTING #1 = wf_counter
          #2 = '2'.
        GET PROPERTY OF gs_cell 'Range' = gs_range.
        SET PROPERTY OF gs_range 'Text' = wa_mara-ersda.
        IF sy-subrc NE 0.
        ENDIF.
       CALL METHOD OF gs_table 'Cell' = gs_cell
          EXPORTING #1 = wf_counter
          #2 = '3'.
        GET PROPERTY OF gs_cell 'Range' = gs_range.
        SET PROPERTY OF gs_range 'Text' = wa_mara-ernam.
        IF sy-subrc NE 0.
        ENDIF.
      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' .
      DO 2 TIMES.
        CALL METHOD OF gs_selection 'TypeParagraph' .
      ENDDO.
      IF sy-subrc NE 0.
      ENDIF.

 

Output is like below -

Yeshica_0-1719907053754.png

Conclusion
Integrating OLE objects in SAP ABAP provides a seamless way to leverage the powerful functionalities of Microsoft Office applications directly within your SAP environment. By automating tasks in Excel, Word, or PowerPoint, you can enhance productivity, streamline workflows, and create dynamic reports. Understanding how to create and manipulate OLE objects in ABAP opens up a myriad of possibilities for SAP developers, allowing for the creation of sophisticated solutions that integrate the best of SAP and Microsoft Office capabilities. With the steps and examples provided, you are now equipped to start incorporating OLE automation into your ABAP programs, making your SAP applications more versatile and efficient.


Hope this may helpful. 

1 Comment
Labels in this area