In this post you will learn to write Excel file to Presentation Server i.e. your laptop or desktop. Simply put – how to download internal table to Excel File from ABAP.

Earlier post ABAP Code Samples : Read Excel File from Presentation Server covered the upload part. This will cover the download part.

TYPES: BEGIN OF xls_line,
         data(256) TYPE x,
       END OF xls_line.

DATA : lt_bin_data TYPE STANDARD TABLE OF xls_line.

SELECT * FROM sflight INTO TABLE @DATA(lt_flights).
IF sy-subrc EQ 0.

  GET REFERENCE OF lt_flights INTO DATA(lr_data_ref).
  DATA(lv_xstring) = zcl_itab_to_excel=>itab_to_excel_xstring( lr_data_ref ).

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     = lv_xstring
    TABLES
      binary_tab = lt_bin_data.

  cl_gui_frontend_services=>gui_download(
    EXPORTING
    filename = CONV #( iv_file )
    filetype = 'BIN'
    IMPORTING
      filelength = DATA(lv_len)
    CHANGING
      data_tab = lt_bin_data
    ).
ENDIF.

A method itab_to_excel_xstring is used here. The code is as below.

Class Definition and Implementation

CLASS zcl_itab_to_excel DEFINITION PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    CLASS-METHODS:
      itab_to_excel_xstring 
        IMPORTING ir_data_ref       TYPE REF TO data
        RETURNING VALUE(rv_xstring) TYPE xstring.
ENDCLASS.

CLASS zcl_itab_to_excel IMPLEMENTATION.
  METHOD itab_to_excel_xstring.

    FIELD-SYMBOLS: <fs_data> TYPE ANY TABLE.

    CLEAR rv_xstring.
    ASSIGN ir_data_ref->* TO <fs_data>.

    TRY.
        cl_salv_table=>factory(
          IMPORTING r_salv_table = DATA(lo_table)
          CHANGING  t_table      = <fs_data> ).
  
        DATA(lt_fcat) = 
          cl_salv_controller_metadata=>get_lvc_fieldcatalog(
            r_columns      = lo_table->get_columns( )
            r_aggregations = lo_table->get_aggregations( ) ).

        DATA(lo_result) =
          cl_salv_ex_util=>factory_result_data_table( 
            r_data         = ir_data_ref
            t_fieldcatalog = lt_fcat ).

        cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform(
          EXPORTING
            xml_type      = if_salv_bs_xml=>c_type_xlsx
            xml_version   = cl_salv_bs_a_xml_base=>get_version( )
            r_result_data = lo_result
            xml_flavour   = if_salv_bs_c_tt=>c_tt_xml_flavour_export
            gui_type      = if_salv_bs_xml=>c_gui_type_gui
          IMPORTING
            xml           = rv_xstring ).
      CATCH cx_root.
        CLEAR rv_xstring.
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

The downloaded Excel file may give below error in some cases – however when you click Yes the Excel opens up correctly.

As mentioned in earlier blogs of this series – a better solution is to use the ABAP2XLSX open source project. It can be found on github at link – https://github.com/abap2xlsx/abap2xlsx

Visit ABAP Code Sample : ABAP2XLSX project for tutorial on installing the project.

Visit ABAP Code Samples page for more code samples.


If you like the content, please subscribe…

Join 2,647 other followers