Sunday, September 14, 2014

Multi-sheets EXCEL file creation and sending as email attachment using XML DOM method in ABAP

Multi-sheets EXCEL file creation and sending as email attachment using XML DOM method in ABAP.
 
EXCEL file creation based on XML DOM method has multiple advantages:
  • Supports multiple sheet creation
  • Suitable for background execution
  • High performance in case of huge data extraction into excel
  • Build in connectivity (send file by email)
 
 
 
Report Source Code:
 
*&---------------------------------------------------------------------*
*& creating excel file with multiple sheets
*& and send as attachment in email
*& Note: Report has no selection screen parameter.
*& Author: Jeetendra Kapase, SAP ABAP consultant, Accenture
*&---------------------------------------------------------------------*


REPORT sy-repid.

*XML Library Types
TYPE-POOLS: ixml.

*-----------------------------------------------------------------------
*
*                          Data Declarations
*
*-----------------------------------------------------------------------
*

* Structure for final output table
TYPES: BEGIN OF gty_final,
        srno(3 TYPE n,
        user_id  TYPE usr02-bname,
        full_name TYPE bapiaddr3-fullname,
        dept      TYPE bapiaddr3-department,
        login(3 TYPE c,
        function  TYPE ad_fnctn,
        building  TYPE ad_bldng_p,
        floor    TYPE  ad_floor,
      END OF gty_final,

* Structure for USR02
      BEGIN OF gty_usr02,
        bname    TYPE usr02-bname,
        trdat    TYPE usr02-trdat,
      END OF gty_usr02,

* Structure for xml line
      BEGIN OF gty_xml_line,
        data(255) TYPE x,
      END OF gty_xml_line.

* Internal Table & Work Area for Final Internal Table
DATA: gt_final            TYPE TABLE OF gty_final,
      gs_final            TYPE gty_final,
      gt_usr02            TYPE TABLE OF gty_usr02,
      gs_usr02            TYPE gty_usr02,
      gs_addr            TYPE bapiaddr3,
      gt_return          TYPE TABLE OF bapiret2,
      gv_date            TYPE d,
      gref_ixml          TYPE REF TO if_ixml,
      gref_streamfactory  TYPE REF TO if_ixml_stream_factory,
      gref_ostream        TYPE REF TO if_ixml_ostream,
      gref_renderer      TYPE REF TO if_ixml_renderer,
      gref_document      TYPE REF TO if_ixml_document,
      gref_element_root  TYPE REF TO if_ixml_element,
      gref_ns_attribute  TYPE REF TO if_ixml_attribute,
      gref_element_pro    TYPE REF TO if_ixml_element,
      gref_worksheet      TYPE REF TO if_ixml_element,
      gref_table          TYPE REF TO if_ixml_element,
      gref_column        TYPE REF TO if_ixml_element,
      gref_row            TYPE REF TO if_ixml_element,
      gref_cell          TYPE REF TO if_ixml_element,
      gref_data          TYPE REF TO if_ixml_element,
      gv_value            TYPE string,
      gref_styles        TYPE REF TO if_ixml_element,
      gref_style          TYPE REF TO if_ixml_element,
      gref_style1        TYPE REF TO if_ixml_element,
      gref_format        TYPE REF TO if_ixml_element,
      gref_border        TYPE REF TO if_ixml_element,
      gt_xml_table        TYPE TABLE OF gty_xml_line,
      gs_xml              TYPE gty_xml_line.

*-----------------------------------------------------------------------
*
*                            Initialization

*-----------------------------------------------------------------------

INITIALIZATION.
  gv_date = sy-datum - 1.


*-----------------------------------------------------------------------
*
*                          Start of Selection
*
*-----------------------------------------------------------------------

START-OF-SELECTION.

  PERFORM get_user_data.
  PERFORM create_xml_based_excel.
  PERFORM send_mail.

*-----------------------------------------------------------------------
*
*                          End of Selection
*
*-----------------------------------------------------------------------

END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Form  get_user_data
*&---------------------------------------------------------------------*
*      Fetch User details from USR02
*----------------------------------------------------------------------*

FORM get_user_data.

  REFRESH gt_final.
  SELECT DISTINCT bname
                  trdat UP TO 5 ROWS
    FROM usr02 INTO TABLE gt_usr02.

  IF sy-subrc IS INITIAL.
    SORT gt_usr02 BY bname.

    LOOP AT gt_usr02 INTO gs_usr02.

* Excel Sheet 1 data
      CLEAR gs_final.
      gs_final-srno = sy-tabix.                  " Serial No.
      gs_final-user_id = gs_usr02-bname.          " User ID

      CALL FUNCTION 'BAPI_USER_GET_DETAIL'
        EXPORTING
          username = gs_usr02-bname
        IMPORTING
          address  = gs_addr
        TABLES
          return  = gt_return
        EXCEPTIONS
          OTHERS  = 4.

      IF sy-subrc IS INITIAL.
        gs_final-full_name = gs_addr-fullname.    " Full Name
        gs_final-dept = gs_addr-department.      " Department
      ENDIF.

      IF gs_usr02-trdat EQ gv_date.
        gs_final-login = 'YES'.                  " Login on Previous
      ELSE.
        gs_final-login = 'NO'.
      ENDIF.

* Excel Sheet 2 data
      gs_final-function = gs_addr-function.      "Function
      gs_final-building = gs_addr-building_p.    "Building
      gs_final-floor  gs_addr-floor_p.        "Floor

      APPEND gs_final TO gt_final.

    ENDLOOP.

  ENDIF.

ENDFORM.                    " get_user_data


*&---------------------------------------------------------------------*
*&      Form  SEND_MAIL
*&---------------------------------------------------------------------*
*      Send Email
*----------------------------------------------------------------------*

FORM send_mail.

  DATA: lt_objpack  LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
        lt_objhead  LIKE solisti1 OCCURS 1 WITH HEADER LINE,
        lt_objbin    LIKE solix OCCURS 10 WITH HEADER LINE,
        lt_objtxt    LIKE solisti1 OCCURS 10 WITH HEADER LINE,
        lt_reclist  LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
        ls_doc_chng  LIKE sodocchgi1,
        lv_tabix TYPE sy-tabix,
        lv_sub_date(10) TYPE c.

* Mail Subject
  CONCATENATE gv_date+6(2) '-' gv_date+4(2) '-' gv_date+0(4) INTO lv_sub_date.
  CONCATENATE 'SAP EXCEL attach using XML' lv_sub_date INTO ls_doc_chng-obj_descr SEPARATED BY space.

* Mail Contents
  lt_objtxt = 'Dear Friend,'.
  APPEND lt_objtxt.

* Space in mail body
  CLEAR lt_objtxt.
  APPEND lt_objtxt.
  CLEAR lt_objtxt.
  APPEND lt_objtxt.
  CLEAR lt_objtxt.
  APPEND lt_objtxt.

* Mail Signature
  lt_objtxt = 'Thanks & Regards,'.
  APPEND lt_objtxt.
  lt_objtxt = 'Jeetendra Kapase'.
  APPEND lt_objtxt.
  lt_objtxt = 'ABAP-Consultant'.
  APPEND lt_objtxt.

  DESCRIBE TABLE lt_objtxt LINES lv_tabix.
  READ TABLE lt_objtxt INDEX lv_tabix.

* Get mail body size
  IF sy-subrc IS INITIAL.
    ls_doc_chng-doc_size = ( lv_tabix - 1 ) * 255 + strlen( lt_objtxt ).
  ENDIF.

* Packing List For the E-mail Body
  lt_objpack-head_start = 1.
  lt_objpack-head_num  = 0.
  lt_objpack-body_start = 1.
  lt_objpack-body_num  = lv_tabix.
  lt_objpack-doc_type  = 'RAW'.
  APPEND lt_objpack.

* Creation of the Excel Document Attachment
  LOOP AT gt_xml_table INTO gs_xml.
    CLEAR lt_objbin.
    lt_objbin-line = gs_xml-data.
    APPEND lt_objbin.
  ENDLOOP.

  DESCRIBE TABLE lt_objbin LINES lv_tabix.
  lt_objhead = 'SAP User Details'.
  APPEND lt_objhead.

* Packing List For the E-mail Attachment
* Excel File name
  lt_objpack-transf_bin = 'X'.
  lt_objpack-head_start = 1.
  lt_objpack-head_num  = 0.
  lt_objpack-body_start = 1.
  lt_objpack-body_num = lv_tabix.
  CONCATENATE 'SAP_User_Details' lv_sub_date INTO lt_objpack-obj_descr SEPARATED BY space.
  lt_objpack-doc_type = 'XLS'.
  lt_objpack-doc_size = lv_tabix * 255.
  APPEND lt_objpack.

* Email Recipent
  CLEAR lt_reclist.
  lt_reclist-receiver = 'testuser@testsystem.com'.
  lt_reclist-rec_type = 'U'.
  APPEND lt_reclist.

* Sending the mail with excel document as attachment.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              = ls_doc_chng
      put_in_outbox              = 'X'
    TABLES
      packing_list              = lt_objpack
      object_header              = lt_objhead
      contents_txt              = lt_objtxt
      contents_hex              = lt_objbin
      receivers                  = lt_reclist
    EXCEPTIONS
      too_many_receivers        = 1
      document_not_sent          = 2
      document_type_not_exist    = 3
      operation_no_authorization = 4
      parameter_error            = 5
      x_error                    = 6
      enqueue_error              = 7
      OTHERS                    = 8.

  IF sy-subrc IS INITIAL.
*To confirm mail is send sucessfully use commit work.
    COMMIT WORK.
    MESSAGE i899(f2) WITH 'Mail send with attach successfully (SOST)'.
  ELSE.
* Error/ Exception handling messages.
    MESSAGE i899(f2) WITH 'Mail was not send!' DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.                    " SEND_MAIL



*&---------------------------------------------------------------------*
*&      Form  create_XML_based_Excel
*&---------------------------------------------------------------------*
*      Process XML Data
*----------------------------------------------------------------------*

FORM create_xml_based_excel .

* Creating a ixml Factory
  gref_ixml = cl_ixml=>create( ).

* Creating the DOM Object Model for Excel file
  gref_document = gref_ixml->create_document( ).

* Create Root Node Excel 'Workbook'
  gref_element_root  = gref_document->create_simple_element( name = 'Workbook'  parent = gref_document ).
  gref_element_root->set_attribute( name = 'xmlns'  value ='urn:schemas-microsoft-com:office:spreadsheet' ).
  gref_ns_attribute = gref_document->create_namespace_decl( name = 'ss' prefix = 'xmlns'  uri = 'urn:schemas-microsoft-com:office:spreadsheet').
  gref_element_root->set_attribute_node( gref_ns_attribute ).
  gref_ns_attribute = gref_document->create_namespace_decl( name = 'x'  prefix = 'xmlns'  uri = 'urn:schemas-microsoft-com:office:excel' ).
  gref_element_root->set_attribute_node( gref_ns_attribute ).

* Create node for document properties.
  gref_element_pro = gref_document->create_simple_element( name = 'TEST_PROGRAM'  parent = gref_element_root ).
  gv_value = sy-uname.

* Excel file author
  gref_document->create_simple_element( name = 'Author'  value = gv_value parent = gref_element_pro  ).

* Excel Styles
  gref_styles = gref_document->create_simple_element( name = 'Styles' parent = gref_element_root  ).

* Style, alignment and font for Header
  gref_style  = gref_document->create_simple_element( name = 'Style' parent = gref_styles  ).
  gref_style->set_attribute_ns( name = 'ID'  prefix = 'ss'  value = 'Header' ).
  gref_format  = gref_document->create_simple_element( name = 'Font'  parent = gref_style  ).
  gref_format->set_attribute_ns( name = 'Bold'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Interior' parent = gref_style  ).
  gref_format->set_attribute_ns( name = 'Color'  prefix = 'ss'  value = '#92D050' ).
  gref_format->set_attribute_ns( name = 'Pattern' prefix = 'ss'  value = 'Solid' ).
  gref_format  = gref_document->create_simple_element( name = 'Alignment' parent = gref_style  ).
  gref_format->set_attribute_ns( name = 'Vertical'  prefix = 'ss'  value = 'Center' ).
  gref_format->set_attribute_ns( name = 'WrapText'  prefix = 'ss'  value = '1' ).

* Border Setting
  gref_border  = gref_document->create_simple_element( name = 'Borders' parent = gref_style ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Bottom' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Left' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Top' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Right' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).

* Style for Data in Excel file
  gref_style1  = gref_document->create_simple_element( name = 'Style' parent = gref_styles  ).
  gref_style1->set_attribute_ns( name = 'ID'  prefix = 'ss'  value = 'Data' ).
  gref_border  = gref_document->create_simple_element( name = 'Borders' parent = gref_style1 ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Bottom' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Left' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Top' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).
  gref_format  = gref_document->create_simple_element( name = 'Border' parent = gref_border  ).
  gref_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Right' ).
  gref_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  gref_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '1' ).


* Excel Worksheet1 Data.
  gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).

* Worksheet Name
  gref_worksheet->set_attribute_ns( name = 'Name'  prefix = 'ss'  value ='SAPUserID' ).

* Table
  gref_table = gref_document->create_simple_element( name = 'Table'  parent = gref_worksheet ).
  gref_table->set_attribute_ns( name = 'FullColumns'  prefix = 'x'  value = '1' ).
  gref_table->set_attribute_ns( name = 'FullRows'    prefix = 'x'  value = '1' ).

* Excel Column Formatting
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '40' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '90' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '140' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '150' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '90' ).

* Blank Row logic
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).

* Column Headers Row logic
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).
  gref_row->set_attribute_ns( name = 'AutoFitHeight'  prefix = 'ss' value = '1' ).

* Sr. No.
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Serial No.'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* SAP User Name
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'User Name'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* User Full Name
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Full Name'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Department
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Department'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Login
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  CONCATENATE 'Login - ' gv_date+6(2) '/' gv_date+4(2) '/' gv_date+0(4 INTO gv_value.
  gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Blank Row after Headers columns
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).

* Adding Data into excel sheet1
  LOOP AT gt_final INTO gs_final.

    gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).

* Sr. No.
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = sy-tabix.
    CONDENSE gv_value NO-GAPS.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).
* Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'Number' ).
* Cell format

* User Name
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-user_id.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Full Name
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-full_name.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Department    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-dept.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Login
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-login.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

  ENDLOOP.


* Excel Worksheet2 Data.
  gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).
  gref_worksheet->set_attribute_ns( name = 'Name'  prefix = 'ss'  value = 'AdditionalDetails' ).

* Table
  gref_table = gref_document->create_simple_element( name = 'Table'  parent = gref_worksheet ).
  gref_table->set_attribute_ns( name = 'FullColumns'  prefix = 'x'  value = '1' ).
  gref_table->set_attribute_ns( name = 'FullRows'    prefix = 'x'  value = '1' ).

* Excel Column Formatting
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '40' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '90' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '140' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '150' ).
  gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
  gref_column->set_attribute_ns( name = 'Width'  prefix = 'ss'  value = '90' ).

* Blank Row logic
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).

* Column Headers Row logic
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).
  gref_row->set_attribute_ns( name = 'AutoFitHeight'  prefix = 'ss' value = '1' ).

* Sr. No.
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Serial No.'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* User Name
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'User Name'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Function
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Function'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Department
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value = 'Building'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Floor
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Header' ).
  gref_data = gref_document->create_simple_element( name = 'Data'  value  'Floor'  parent = gref_cell ).
  gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss' value = 'String' ).

* Blank Row after Column Headers
  gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
  gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
  gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).

* Adding Data into excel sheet2
  LOOP AT gt_final INTO gs_final.

    gref_row = gref_document->create_simple_element( name = 'Row'  parent = gref_table ).

* Sr. No.
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = sy-tabix.
    CONDENSE gv_value NO-GAPS.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'Number' ).                              " Cell format

* User Name
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-user_id.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Function
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-function.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Building
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-building.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

* Floor
    gref_cell = gref_document->create_simple_element( name = 'Cell'  parent = gref_row ).
    gref_cell->set_attribute_ns( name = 'StyleID'  prefix = 'ss'  value = 'Data' ).
    gv_value = gs_final-floor.
    gref_data = gref_document->create_simple_element( name = 'Data'  value = gv_value  parent = gref_cell ).          " Data
    gref_data->set_attribute_ns( name = 'Type'  prefix = 'ss'  value = 'String' ).                              " Cell format

  ENDLOOP.

* Creating a Stream Factory for XML
  gref_streamfactory = gref_ixml->create_stream_factory( ).

* Connect Internal XML Table to Stream Factory for Excel data
  gref_ostream = gref_streamfactory->create_ostream_itable( table = gt_xml_table ).

* Rendering the Document
  gref_renderer = gref_ixml->create_renderer( ostream  = gref_ostream  document = gref_document ).
  gref_renderer->render( ).

* Saving the XML Document
  gref_ostream->get_num_written_raw( ).

ENDFORM.                    " create_XML_based_Excel
 
 
 
**********************************************************************************************************************************************************

3 comments: