diff --git a/src/demos/zdemo_excel43.prog.abap b/src/demos/zdemo_excel43.prog.abap index cdc5467..b39eaf5 100644 --- a/src/demos/zdemo_excel43.prog.abap +++ b/src/demos/zdemo_excel43.prog.abap @@ -23,35 +23,56 @@ DATA: lo_excel TYPE REF TO zcl_excel, lo_reader TYPE REF TO zif_excel_reader, lo_worksheet TYPE REF TO zcl_excel_worksheet, lo_salv TYPE REF TO cl_salv_table. +DATA: lo_error TYPE REF TO cx_root. -" -"Ask User to choose a path -" -cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = 'Excel selection' - file_filter = '*.xlsx' - multiselection = abap_false - CHANGING file_table = lt_filetable " Tabelle, die selektierte Dateien enthält - rc = lv_subrc - EXCEPTIONS file_open_dialog_failed = 1 - cntl_error = 2 - error_no_gui = 3 - not_supported_by_gui = 4 - OTHERS = 5 ). -IF sy-subrc <> 0. - MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno - WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. -ELSE. - CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007. - LOOP AT lt_filetable INTO ls_filetable. - lo_excel = lo_reader->load_file( ls_filetable-filename ). - lo_worksheet = lo_excel->get_worksheet_by_index( iv_index = 1 ). - lo_worksheet->get_table( IMPORTING et_table = lt_tab ). - ENDLOOP. -ENDIF. -" -"Do the presentation stuff -" +PARAMETERS p_file TYPE string LOWER CASE. +PARAMETERS p_skip_b AS CHECKBOX. -cl_salv_table=>factory( IMPORTING r_salv_table = lo_salv - CHANGING t_table = lt_tab ). -lo_salv->display( ). +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. + " + "Ask User to choose a path + " + cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = 'Excel selection' + file_filter = '*.xlsx' + multiselection = abap_false + CHANGING file_table = lt_filetable " Tabelle, die selektierte Dateien enthält + rc = lv_subrc + EXCEPTIONS file_open_dialog_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + OTHERS = 5 ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + DELETE lt_filetable FROM 2. + READ TABLE lt_filetable INDEX 1 INTO ls_filetable. + IF sy-subrc = 0. + p_file = ls_filetable-filename. + ENDIF. + +START-OF-SELECTION. + + TRY. + + CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007. + lo_excel = lo_reader->load_file( p_file ). + lo_worksheet = lo_excel->get_worksheet_by_index( iv_index = 1 ). + lo_worksheet->get_table( + EXPORTING + iv_skip_bottom_empty_rows = p_skip_b + IMPORTING + et_table = lt_tab ). + + " + "Do the presentation stuff + " + + cl_salv_table=>factory( IMPORTING r_salv_table = lo_salv + CHANGING t_table = lt_tab ). + lo_salv->display( ). + + CATCH cx_root INTO lo_error. + MESSAGE lo_error TYPE 'I' DISPLAY LIKE 'E'. + ENDTRY. diff --git a/src/demos/zdemo_excel43.prog.xml b/src/demos/zdemo_excel43.prog.xml index 81792c0..2e95fa3 100644 --- a/src/demos/zdemo_excel43.prog.xml +++ b/src/demos/zdemo_excel43.prog.xml @@ -15,6 +15,18 @@ abap2xlsx Demo: Demo 43 GET_TABLE 33 + + S + P_FILE + Excel file + 18 + + + S + P_SKIP_B + Skip bottom empty rows + 30 + diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index c44a521..7311994 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -590,12 +590,13 @@ CLASS zcl_excel_worksheet DEFINITION zcx_excel . METHODS get_table IMPORTING - !iv_skipped_rows TYPE int4 DEFAULT 0 - !iv_skipped_cols TYPE int4 DEFAULT 0 - !iv_max_col TYPE int4 OPTIONAL - !iv_max_row TYPE int4 OPTIONAL + !iv_skipped_rows TYPE int4 DEFAULT 0 + !iv_skipped_cols TYPE int4 DEFAULT 0 + !iv_max_col TYPE int4 OPTIONAL + !iv_max_row TYPE int4 OPTIONAL + !iv_skip_bottom_empty_rows TYPE abap_bool DEFAULT abap_false EXPORTING - !et_table TYPE STANDARD TABLE + !et_table TYPE STANDARD TABLE RAISING zcx_excel . METHODS set_merge_style @@ -2643,6 +2644,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. DATA lx_conversion_error TYPE REF TO cx_sy_conversion_error. DATA lv_float TYPE f. DATA lv_type. + DATA lv_tabix TYPE i. lv_max_col = me->get_highest_column( ). IF iv_max_col IS SUPPLIED AND iv_max_col < lv_max_col. @@ -2747,6 +2749,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDWHILE. ADD 1 TO lv_actual_row. ENDWHILE. + + IF iv_skip_bottom_empty_rows = abap_true. + lv_tabix = lines( et_table ). + WHILE lv_tabix >= 1. + READ TABLE et_table INDEX lv_tabix ASSIGNING . + ASSERT sy-subrc = 0. + IF IS NOT INITIAL. + EXIT. + ENDIF. + DELETE et_table INDEX lv_tabix. + lv_tabix = lv_tabix - 1. + ENDWHILE. + ENDIF. + ENDIF.