CLASS zini_cl_export_2_xls DEFINITION.
PUBLIC SECTION.
DATA: lo_table TYPE REF TO cl_salv_table.
METHODS: data_load CHANGING t_any TYPE ANY TABLE,
data_export IMPORTING i_file TYPE string OPTIONAL.
PRIVATE SECTION.
METHODS: ejemplo.
ENDCLASS.
CLASS zini_cl_export_2_xls IMPLEMENTATION.
METHOD data_load.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_table
CHANGING
t_table = t_any
).
CATCH cx_salv_msg.
ENDTRY.
ENDMETHOD.
METHOD data_export.
DATA: lt_bin TYPE STANDARD TABLE OF solix,
lv_size TYPE i.
DATA: lv_file_table TYPE filetable,
lv_rc TYPE i.
DATA(lv_xml) = lo_table->to_xml( xml_type = if_salv_bs_xml=>c_type_xlsx ).
"To convert XSTRING to Binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xml
IMPORTING
output_length = lv_size
TABLES
binary_tab = lt_bin.
DATA(filename) = i_file.
DATA(path) = CONV string( '' ).
DATA(l01) = CONV string( '' ).
IF i_file IS INITIAL.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Descargar XLS'
default_extension = 'XLS'
CHANGING
filename = l01
path = path
fullpath = filename
EXCEPTIONS
OTHERS = 5.
IF sy-subrc NE 0.
CLEAR filename.
ENDIF.
ENDIF.
CHECK filename IS NOT INITIAL.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = lv_size
filename = filename
filetype = 'BIN'
* IMPORTING
* filelength = me->filesize
CHANGING
data_tab = lt_bin
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
ENDMETHOD.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Ejemplo de uso
METHOD ejemplo.
SELECT * FROM t000 INTO TABLE @DATA(lt_t000).
DATA(cl_xls) = NEW zini_cl_export_2_xls( ).
cl_xls->data_load( CHANGING t_any = lt_t000 ).
cl_xls->data_export( ).
ENDMETHOD.
ENDCLASS.