REPORT zdemo_excel37.
DATA: excel TYPE REF TO zcl_excel,
reader TYPE REF TO zif_excel_reader,
go_error TYPE REF TO cx_root,
gv_message type string.
CONSTANTS: gc_save_file_name TYPE string VALUE '37-passthrough.xlsx'.
SELECTION-SCREEN BEGIN OF BLOCK blx WITH FRAME.
PARAMETERS: p_upfile TYPE string DEFAULT 'c:\temp\whatever.xlsx' LOWER CASE.
SELECTION-SCREEN END OF BLOCK blx.
INCLUDE zdemo_excel_outputopt_incl.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_upfile.
PERFORM f4_p_upfile CHANGING p_upfile.
START-OF-SELECTION.
TRY.
CREATE OBJECT reader TYPE zcl_excel_reader_2007.
* CREATE OBJECT reader TYPE zcl_excel_reader_xlsm.
excel = reader->load_file( p_upfile ).
"Use template for charts
excel->use_template = abap_true.
*--------------------------------------------------------------------*
* CL_ABAP_ZIP may have problems reading LibreOffice generated files
* You may have to use alternate ZIP-Class - see comments in issue #234 in abap2xlsx at developers network
* excel = reader->load_file( i_filename = p_upfile
* iv_use_alternate_zip = 'ZCL_EXCEL_ABAP_ZIP' ).
*--------------------------------------------------------------------*
*** Create output
lcl_output=>output( excel ).
CATCH cx_root INTO go_error.
MESSAGE 'Error reading excelfile' TYPE 'I'.
gv_message = go_error->get_text( ).
IF gv_message IS NOT INITIAL.
MESSAGE gv_message TYPE 'I'.
ENDIF.
ENDTRY.
*&---------------------------------------------------------------------*
*& Form F4_P_UPFILE
*&---------------------------------------------------------------------*
FORM f4_p_upfile CHANGING p_upfile TYPE string.
DATA: lv_repid TYPE syrepid,
lt_fields TYPE dynpread_tabtype,
ls_field LIKE LINE OF lt_fields,
lt_files TYPE filetable.
lv_repid = sy-repid.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = lv_repid
dynumb = '1000'
request = 'A'
TABLES
dynpfields = lt_fields
EXCEPTIONS
invalid_abapworkarea = 01
invalid_dynprofield = 02
invalid_dynproname = 03
invalid_dynpronummer = 04
invalid_request = 05
no_fielddescription = 06
undefind_error = 07.
READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'P_UPFILE'.
p_upfile = ls_field-fieldvalue.
cl_gui_frontend_services=>file_open_dialog( EXPORTING
default_filename = p_upfile
file_filter = zcl_excel_common=>c_xlsx_file_filter
CHANGING
file_table = lt_files
rc = sy-tabix
EXCEPTIONS
OTHERS = 1 ).
READ TABLE lt_files INDEX 1 INTO p_upfile.
ENDFORM. " F4_P_UPFILE