diff --git a/src/zcl_excel_writer_csv.clas.abap b/src/zcl_excel_writer_csv.clas.abap index 7aa976b..4c0dbc8 100644 --- a/src/zcl_excel_writer_csv.clas.abap +++ b/src/zcl_excel_writer_csv.clas.abap @@ -30,6 +30,12 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-METHODS set_initial_ext_date IMPORTING !ip_value TYPE char10 DEFAULT c_default . + CLASS-METHODS set_skip_hidden_rows + IMPORTING + !ip_value TYPE abap_bool. + CLASS-METHODS set_skip_hidden_columns + IMPORTING + !ip_value TYPE abap_bool. *"* protected components of class ZCL_EXCEL_WRITER_CSV *"* do not include other source files here!!! PROTECTED SECTION. @@ -45,6 +51,8 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . CLASS-DATA initial_ext_date TYPE char10 VALUE c_default. + CLASS-DATA skip_hidden_rows TYPE abap_bool. + CLASS-DATA skip_hidden_columns TYPE abap_bool. METHODS create RETURNING @@ -91,6 +99,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. DATA: lo_iterator TYPE REF TO zcl_excel_collection_iterator, lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: lo_autofilter TYPE REF TO zcl_excel_autofilter. + DATA: lv_row_hidden TYPE abap_bool. + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, lv_row TYPE i, lv_col TYPE i, @@ -113,8 +124,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. * --- Retrieve SAP date format CLEAR ls_format. SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' - AND ddlanguage = sy-langu. + AND ( ddlanguage = sy-langu OR ddlanguage = 'E' ). ls_format-cmpname = 'DATE'. + ls_format-attvalue = ls_format-attvalue(10). " Ignore description, only use pattern CONDENSE ls_format-attvalue. CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. APPEND ls_format TO lt_format. @@ -151,11 +163,54 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. SORT lt_cell_data BY cell_row cell_column. + + IF skip_hidden_rows = abap_true. +* --- Retrieve autofilters (to identify hidden rows) + lo_autofilter = excel->get_autofilters_reference( )->get( io_worksheet = lo_worksheet ). + IF lo_autofilter IS NOT INITIAL. + lo_autofilter->get_filter_area( ). " trigger filter area validation + ENDIF. + ENDIF. + lv_row = 1. lv_col = 1. CLEAR lv_string. LOOP AT lt_cell_data ASSIGNING . +* --- Check, if row is hidden + AT NEW cell_row. + IF lo_autofilter IS NOT INITIAL. + lv_row_hidden = lo_autofilter->is_row_hidden( iv_row = -cell_row ). + ENDIF. + ENDAT. + +* --- Add empty rows + WHILE lv_row < -cell_row. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. + +* --- Skip hidden rows + IF lv_row_hidden = abap_true. + lv_row = -cell_row + 1. + lv_col = 1. + CONTINUE. + ENDIF. + +* --- Add empty columns + WHILE lv_col < -cell_column. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. + +* --- Skip hidden columns + IF skip_hidden_columns = abap_true AND + lo_worksheet->get_column( ip_column = -cell_column )->get_visible( ) = abap_false. + lv_col = -cell_column + 1. + CONTINUE. + ENDIF. + * --- Retrieve Cell Style format and data type CLEAR ls_numfmt. IF -data_type IS INITIAL AND -cell_style IS NOT INITIAL. @@ -210,19 +265,6 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDIF. " lv_attrname IS NOT INITIAL. ENDIF. " -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. -* --- Add empty rows - WHILE lv_row < -cell_row. - CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. - lv_row = lv_row + 1. - lv_col = 1. - ENDWHILE. - -* --- Add empty columns - WHILE lv_col < -cell_column. - CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. - lv_col = lv_col + 1. - ENDWHILE. - * ----- Use format to determine the data type and display format. CASE -data_type. @@ -318,6 +360,16 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDMETHOD. + METHOD set_skip_hidden_rows. + skip_hidden_rows = ip_value. + ENDMETHOD. + + + METHOD set_skip_hidden_columns. + skip_hidden_columns = ip_value. + ENDMETHOD. + + METHOD zif_excel_writer~write_file. me->excel = io_excel. ep_file = me->create( ).