mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 05:16:16 +08:00
GET_TABLE skip bottom empty rows (#959)
Fix #787 Co-authored-by: sandraros <sandra.rossi@gmail.com> Co-authored-by: Abo <andrea@borgia.bo.it>
This commit is contained in:
parent
cc291983d7
commit
c3481d5d90
|
@ -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.
|
||||
|
|
|
@ -15,6 +15,18 @@
|
|||
<ENTRY>abap2xlsx Demo: Demo 43 GET_TABLE</ENTRY>
|
||||
<LENGTH>33</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_FILE</KEY>
|
||||
<ENTRY>Excel file</ENTRY>
|
||||
<LENGTH>18</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_SKIP_B</KEY>
|
||||
<ENTRY>Skip bottom empty rows</ENTRY>
|
||||
<LENGTH>30</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx: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 <ls_line>.
|
||||
ASSERT sy-subrc = 0.
|
||||
IF <ls_line> IS NOT INITIAL.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
DELETE et_table INDEX lv_tabix.
|
||||
lv_tabix = lv_tabix - 1.
|
||||
ENDWHILE.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user