Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
kesavadas_thekkillath
Active Contributor

Simple program to download excel in MHTML format from internal table ( ex: can be used in case of downloading icons,subtotals, coloring etc ).

This program is just a sample created for my purpose,please do further research as required. The below code can be used just in case of custom requirements if any. The method factory_result_data_table has many parameters where in we can format the data to be displayed.

REPORT  ymhtml_download.
*----------------------------------------------------------------------*
*       CLASS lcl_local DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_local DEFINITION INHERITING FROM cl_gui_alv_grid.
  PUBLIC SECTION.
    METHODS: provide_gui_type RETURNING value(lv_type) TYPE i,
             constructor IMPORTING i_parent TYPE REF TO cl_gui_container.
ENDCLASS.                    "lcl_local DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_local IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_local IMPLEMENTATION.
  METHOD provide_gui_type.
    lv_type = get_gui_type( ).
  ENDMETHOD.                    "get_gui_type
  METHOD constructor.
    super->constructor( i_parent = i_parent ).
  ENDMETHOD.                    "constructor
ENDCLASS.                    "lcl_local IMPLEMENTATION
DATA:it_output TYPE TABLE OF ymhtml_output,
     ls_layout TYPE lvc_s_layo,
     lt_fcat TYPE lvc_t_fcat,
     lt_sort TYPE lvc_t_sort,
     lt_filter TYPE lvc_t_filt,
     lv_version TYPE string,
     lv_display_mode TYPE i,
     lv_gui_type TYPE i,
     lv_xml TYPE xstring,
     lv_value TYPE salv_gzt_admin_value,
     lr_container TYPE REF TO cl_gui_container,
     ls_xml_choice TYPE if_salv_bs_xml=>s_type_xml_choice,
     lt_xml_choice TYPE if_salv_bs_xml=>t_type_xml_choice.
DATA:lr_result_data TYPE REF TO cl_salv_ex_result_data_table,
     lr_controller TYPE REF TO cl_salv_export_c8r,
     lr_data TYPE REF TO data,
     lr_obj TYPE REF TO lcl_local.
FIELD-SYMBOLS:<fs_wa> TYPE ymhtml_output,
              <fs_fcat> TYPE lvc_s_fcat.
START-OF-SELECTION.
  SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 10 ROWS.
  IF it_output[] IS INITIAL.
    EXIT.
  ENDIF.
  LOOP AT it_output ASSIGNING <fs_wa>.
    <fs_wa>-icon1 = '@01@'.
    <fs_wa>-icon2 = '@06@'.
    <fs_wa>-value = sy-tabix + 1.
  ENDLOOP.
  GET REFERENCE OF it_output[] INTO lr_data.
  ls_layout-cwidth_opt = abap_true.
  ls_layout-zebra = 'X'.
  CREATE OBJECT lr_obj
    EXPORTING
      i_parent = lr_container.
  lv_version = cl_salv_bs_a_xml_base=>get_version( ).
  IF lv_version IS INITIAL.
    lv_version = if_salv_bs_xml=>version.
  ENDIF.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name   = 'YMHTML_OUTPUT'
      i_bypassing_buffer = 'X'
    CHANGING
      ct_fieldcat        = lt_fcat.
  IF lt_fcat[] IS NOT INITIAL.
    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'ICON1'.
    IF sy-subrc = 0.
      <fs_fcat>-icon = 'X'.
    ENDIF.
    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'ICON2'.
    IF sy-subrc = 0.
      <fs_fcat>-icon = 'X'.
    ENDIF.
    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'VALUE'.
    IF sy-subrc = 0.
      <fs_fcat>-do_sum = 'X'.
    ENDIF.
  ENDIF.
lv_value = abap_true.
  cl_salv_gzt_admin=>set_value( EXPORTING
          object = cl_salv_gzt_admin=>c_param-prevent_export_format_perso
        value  = lv_value ).
lt_xml_choice =
          cl_salv_export_xml_dialog=>execute( gui_type = lr_obj->provide_gui_type( )
                          display_mode = cl_salv_export_xml_dialog=>c_display_mode-menu_item ).
*-Set popup state to previous
  lv_value = abap_false.
  cl_salv_gzt_admin=>set_value( EXPORTING
                    object = cl_salv_gzt_admin=>c_param-prevent_export_format_perso
                value  = lv_value ).
*-
  READ TABLE lt_xml_choice INTO ls_xml_choice INDEX 1.
  IF sy-subrc NE 0.
    EXIT.
  ENDIF.
  lr_result_data = cl_salv_ex_util=>factory_result_data_table( r_data          = lr_data
                                                               t_fieldcatalog  = lt_fcat
                                                               s_layout        = ls_layout ).
  cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform( EXPORTING 
                                                            xml_type      = ls_xml_choice-xml_type
                                                xml_version   = lv_version
                                                r_result_data = lr_result_data
                                                xml_flavour   = if_salv_bs_c_tt=>c_tt_xml_flavour_export
                                                gui_type      = ls_xml_choice-gui_type
                                                    IMPORTING 
                                                            xml           = lv_xml ).
  cl_salv_export_xml_dialog=>download( s_xml_choice = ls_xml_choice xml = lv_xml ).
2 Comments