diff --git a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk index c7824eb..e30e08f 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk @@ -226,7 +226,7 @@ endmethod. - method ZIF_EXCEL_READER~LOAD_FILE. + METHOD zif_excel_reader~load_file. *--------------------------------------------------------------------* * ToDos: * 2do§1 decision whether to load from frontend or backend @@ -255,129 +255,24 @@ * changes: passing new optional input parameter to private attribute *--------------------------------------------------------------------* - CONSTANTS: lcv_load_from_frontend TYPE char1 VALUE 'F', - lcv_load_from_backend TYPE char1 VALUE 'B'. + DATA: lv_excel_data TYPE xstring. - DATA: lv_load_from_source TYPE char1, +* issue#234 - error reading xlsx written by libre office + me->zif_excel_reader~gv_use_alternate_zip = i_use_alternate_zip. - lv_filelength TYPE i, - lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, - ls_binary_data LIKE LINE OF lt_binary_data, -* Background processing - lv_max_length_line TYPE i, - lv_actual_length_line TYPE i, - - lv_errormessage TYPE string, " Can't pass '...'(abc) to exception-class - lv_excel_data TYPE xstring. " Binary content of .xlsx file - -DATA: lv_filename TYPE string. - -*--------------------------------------------------------------------* -* ToDos: 2do§1 Decision whether to load from frontend or backend -*--------------------------------------------------------------------* + IF i_from_applserver = abap_true. + lv_excel_data = me->read_from_applserver( i_filename = i_filename ). + ELSE. + lv_excel_data = me->read_from_local_file( i_filename = i_filename ). + ENDIF. *--------------------------------------------------------------------* * issue#234 - error reading xlsx written by libre office - me->zif_excel_reader~gv_use_alternate_zip = i_use_alternate_zip. + r_excel = me->zif_excel_reader~load( i_excel2007 = lv_excel_data + i_use_alternate_zip = i_use_alternate_zip ). *--------------------------------------------------------------------* - -*--------------------------------------------------------------------* -* Autodecide on frontend or backend reading -* Background-processing --> backend reading -* Online-processing --> frontend reading -*--------------------------------------------------------------------* - IF I_FROM_APPLSERVER = abap_true. - lv_load_from_source = lcv_load_from_backend. - ELSE. - lv_load_from_source = lcv_load_from_frontend. - ENDIF. - - move i_filename TO lv_filename. - - CASE lv_load_from_source. - -*--------------------------------------------------------------------* -* Read from backend -*--------------------------------------------------------------------* - WHEN lcv_load_from_backend. - DESCRIBE FIELD ls_binary_data LENGTH lv_max_length_line IN BYTE MODE. - OPEN DATASET lv_filename FOR INPUT IN BINARY MODE. - IF sy-subrc <> 0. - lv_errormessage = 'A problem occured when reading the file'(001). - RAISE EXCEPTION TYPE zcx_excel - EXPORTING - error = lv_errormessage. - ENDIF. - WHILE sy-subrc = 0. - - READ DATASET lv_filename INTO ls_binary_data MAXIMUM LENGTH lv_max_length_line ACTUAL LENGTH lv_actual_length_line. - APPEND ls_binary_data TO lt_binary_data. - lv_filelength = lv_filelength + lv_actual_length_line. - - ENDWHILE. - CLOSE DATASET lv_filename. - -*--------------------------------------------------------------------* -* Read from frontend -*--------------------------------------------------------------------* - WHEN lcv_load_from_frontend. - cl_gui_frontend_services=>gui_upload( EXPORTING - filename = lv_filename - filetype = 'BIN' " We are basically working with zipped directories --> force binary read - IMPORTING - filelength = lv_filelength - CHANGING - data_tab = lt_binary_data - EXCEPTIONS - file_open_error = 1 - file_read_error = 2 - no_batch = 3 - gui_refuse_filetransfer = 4 - invalid_type = 5 - no_authority = 6 - unknown_error = 7 - bad_data_format = 8 - header_not_allowed = 9 - separator_not_allowed = 10 - header_too_long = 11 - unknown_dp_error = 12 - access_denied = 13 - dp_out_of_memory = 14 - disk_full = 15 - dp_timeout = 16 - not_supported_by_gui = 17 - error_no_gui = 18 - OTHERS = 19 ). - IF sy-subrc <> 0. - lv_errormessage = 'A problem occured when reading the file'(001). - RAISE EXCEPTION TYPE zcx_excel - EXPORTING - error = lv_errormessage. - ENDIF. - - ENDCASE. - - -*--------------------------------------------------------------------* -* Binary data needs to be provided as XSTRING for further processing -*--------------------------------------------------------------------* - CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' - EXPORTING - input_length = lv_filelength - IMPORTING - buffer = lv_excel_data - TABLES - binary_tab = lt_binary_data. - -*--------------------------------------------------------------------* -* issue#234 - error reading xlsx written by libre office - r_excel = me->zif_excel_reader~load( i_excel2007 = lv_excel_data - i_use_alternate_zip = i_use_alternate_zip ). -*--------------------------------------------------------------------* - - - endmethod. + ENDMETHOD. @@ -2710,11 +2605,6 @@ DATA: lv_filename TYPE string. path2 = path. zcl_excel_common=>split_file( EXPORTING ip_file = path2 IMPORTING ep_extension = file_ext2 ). -* CALL FUNCTION 'CV120_SPLIT_FILE' -* EXPORTING -* pf_file = path2 -* IMPORTING -* pfx_extension = file_ext2. rel_drawing-file_ext = file_ext2. "-------------Added by Alessandro Iannacci - Should load graph xml @@ -2766,6 +2656,109 @@ DATA: lv_filename TYPE string. endmethod. + + + + METHOD read_from_applserver. + + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_max_length_line TYPE i, + lv_actual_length_line TYPE i, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + DESCRIBE FIELD ls_binary_data LENGTH lv_max_length_line IN BYTE MODE. + OPEN DATASET lv_filename FOR INPUT IN BINARY MODE. + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + WHILE sy-subrc = 0. + + READ DATASET lv_filename INTO ls_binary_data MAXIMUM LENGTH lv_max_length_line ACTUAL LENGTH lv_actual_length_line. + APPEND ls_binary_data TO lt_binary_data. + lv_filelength = lv_filelength + lv_actual_length_line. + + ENDWHILE. + CLOSE DATASET lv_filename. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + ENDMETHOD. + + + + + METHOD read_from_local_file. + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + cl_gui_frontend_services=>gui_upload( EXPORTING + filename = lv_filename + filetype = 'BIN' " We are basically working with zipped directories --> force binary read + IMPORTING + filelength = lv_filelength + CHANGING + data_tab = lt_binary_data + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 ). + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + + ENDMETHOD. +