ABAPEXP 2 XLS

  1.  
  2. CLASS zini_cl_export_2_xls DEFINITION.
  3.  
  4.   PUBLIC SECTION.
  5.  
  6.     DATA: lo_table TYPE REF TO cl_salv_table.
  7.  
  8.     METHODS: data_load CHANGING t_any TYPE ANY TABLE,
  9.       data_export IMPORTING i_file TYPE string OPTIONAL.
  10.  
  11.  
  12.   PRIVATE SECTION.
  13.  
  14.     METHODS: ejemplo.
  15.  
  16. ENDCLASS.
  17.  
  18. CLASS zini_cl_export_2_xls IMPLEMENTATION.
  19.  
  20.   METHOD data_load.
  21.     TRY.
  22.         cl_salv_table=>factory(
  23.           IMPORTING
  24.             r_salv_table   = lo_table
  25.           CHANGING
  26.             t_table        = t_any
  27.         ).
  28.       CATCH cx_salv_msg.
  29.     ENDTRY.
  30.  
  31.   ENDMETHOD.
  32.  
  33.   METHOD data_export.
  34.  
  35.     DATA: lt_bin  TYPE STANDARD TABLE OF solix,
  36.           lv_size TYPE i.
  37.  
  38.     DATA: lv_file_table TYPE filetable,
  39.           lv_rc         TYPE i.
  40.  
  41.     DATA(lv_xml) = lo_table->to_xml( xml_type = if_salv_bs_xml=>c_type_xlsx ).
  42.  
  43.     "To convert XSTRING to Binary
  44.     CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  45.       EXPORTING
  46.         buffer        = lv_xml
  47.       IMPORTING
  48.         output_length = lv_size
  49.       TABLES
  50.         binary_tab    = lt_bin.
  51.  
  52.     DATA(filename) = i_file.
  53.     DATA(path) = CONV string( '' ).
  54.     DATA(l01) =   CONV string( '' ).
  55.     IF i_file IS INITIAL.
  56.  
  57.       CALL METHOD cl_gui_frontend_services=>file_save_dialog
  58.         EXPORTING
  59.           window_title      = 'Descargar XLS'
  60.           default_extension = 'XLS'
  61.         CHANGING
  62.           filename          = l01
  63.           path              = path
  64.           fullpath          = filename
  65.         EXCEPTIONS
  66.           OTHERS            = 5.
  67.       IF sy-subrc NE 0.
  68.         CLEAR filename.
  69.       ENDIF.
  70.  
  71.     ENDIF.
  72.  
  73.     CHECK filename IS NOT INITIAL.
  74.  
  75.     CALL METHOD cl_gui_frontend_services=>gui_download
  76.       EXPORTING
  77.         bin_filesize            = lv_size
  78.         filename                = filename
  79.         filetype                = 'BIN'
  80. *      IMPORTING
  81. *       filelength              = me->filesize
  82.       CHANGING
  83.         data_tab                = lt_bin
  84.       EXCEPTIONS
  85.         file_write_error        = 1
  86.         no_batch                = 2
  87.         gui_refuse_filetransfer = 3
  88.         invalid_type            = 4
  89.         no_authority            = 5
  90.         unknown_error           = 6
  91.         header_not_allowed      = 7
  92.         separator_not_allowed   = 8
  93.         filesize_not_allowed    = 9
  94.         header_too_long         = 10
  95.         dp_error_create         = 11
  96.         dp_error_send           = 12
  97.         dp_error_write          = 13
  98.         unknown_dp_error        = 14
  99.         access_denied           = 15
  100.         dp_out_of_memory        = 16
  101.         disk_full               = 17
  102.         dp_timeout              = 18
  103.         file_not_found          = 19
  104.         dataprovider_exception  = 20
  105.         control_flush_error     = 21
  106.         not_supported_by_gui    = 22
  107.         error_no_gui            = 23
  108.         OTHERS                  = 24.
  109.  
  110.   ENDMETHOD.
  111.  
  112. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  113. *--[ Ejemplo de uso
  114.   METHOD ejemplo.
  115.  
  116.     SELECT * FROM t000 INTO TABLE @DATA(lt_t000).
  117.  
  118.     DATA(cl_xls) = NEW zini_cl_export_2_xls(  ).
  119.     cl_xls->data_load( CHANGING t_any = lt_t000 ).
  120.     cl_xls->data_export(  ).
  121.  
  122.   ENDMETHOD.
  123.  
  124. ENDCLASS.
  125.